PDA

Ver la Versión Completa : Lanzando una excepción en una DLL


cht666cht
11-02-2004, 12:26:33
Hola a todos, estoy haciendo una DLL con algunas y cuando hay algún error utilizo el raise Exception.Create...

El problema es que al usar la DLL desde una aplicación, cuando se lanza una de estas excepciones en vez de mostrarme el mensaje de la excepcion que he creado, me muestra algo asi como:
"Exception Exception in module xxx.dll at xxxxxxxx."

mirando en el Forms.pas, he visto que en el método TApplication.HandleException se comprueba que la excepción sea de tipo Exception (...if ExceptObject is Exception then...), y me imagino que lo que está pasando es que la aplicación no reconoce la excepción lanzada desde la DLL como del mismo tipo 'Exception' que el definido en la aplicación, y por eso la trata como una excepción del SO.

A alguien le ha pasado algo parecido? según la ayuda del delphi tendría que funcionar correctamente. Y añadiendo el sharemem en los uses, por probar, tampoco lo he solucionado.

delphi.com.ar
11-02-2004, 14:19:34
Yo en DLL´s utilizo una filosofía similar a la de Windows... Las funciones exportadas, como resultado retornan un valor que indican si se ejecutaron correctamente, de no ser así, tengo una función similar a GetLastError y FormatMessage...

Es solo una idea..
Saludos!

roman
11-02-2004, 16:31:54
Si tanto la aplicación como la dll se compilan con paquetes de ejecución entonces funciona correctamente.

Por otra parte es curioso que aun cuando el mensaje de la excepción no se muestra correctamente, éste si se incluye en la propiedad Message del objeto excepción:


try
except
on E: Exception do
ShowMessage(E.Message);
end;


// Saludos

cht666cht
12-02-2004, 09:49:01
Lo acabo de probar y funciona perfectamente, gracias!
lo que esto supongo que me obliga a distribuir los .DCPs utilizados. Hay alguna manera rápida de saber cuales son?

lo del try...except ya me habia dado cuenta pero claro, no voy a estar encerrando cada llamada a las funciones de la DLL en try...excepts, para eso utilizo un código de retorno como decia delphi.com.ar