La Web del Programador: Comunidad de Programadores
 
    Pregunta:  13556 - COMPONENTES ADO QUE FUNCIONAN EN UN EXE PERO NO EN UNA DLL
Autor:  Santiago Reyes
Me he creado un programa muy simple que muestra los datos de una tabla de ACCESS 97, en un DBGRID. Para ello, utilizo una ADOTable (que se conecta a la BD de ACCESS mediante un ODBC que he creado)y un DataSource.
De este programa he hecho dos versiones: un .EXE y una .DLL.
El .EXE funciona perfectamente. Sin embargo la .DLL me da un error "EOleSysError" con el siguiente mensaje: "No se ha llamado a CoInitialize". No llego a entender por qué pasa esto si el .EXE y la .DLL son iguales.

Un Saludo y GRACIAS.

  Respuesta:  mamcx m
Felicitaciones: Ahora ves la diferencia entre un EXE y una DLL...

Si abres el archivo de aplicacion (Project/View Source) vas a ver cosas con Application.Initialize etc.. Application se encarga de crear los forms y DataModules cuando se carga el EXE. Has lo mismo en la DLL (Ups!!) Nada... y esto es porque una DLL Trabaja en Memoria, y su ciclo de vida NO es controlado por la DLL si no por quien lo llama (o sea, en otro exe se carga la DLL, se va a memoria, luego cuando el exe termina de usarla, se descarga de alli)

El problema es sencillamente que el TDataModule no esta creado... Debes crear en CADA metodo/propiedad que la invoque.. Para ello usa

MiModullo:=TDataModule.Create
try
Codigo
finally
Mimodulo.Free =IMPORTANTE
end;