Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Crear un form en una libreria Dll (https://www.clubdelphi.com/foros/showthread.php?t=60588)

miguelcba 06-10-2008 22:58:55

Crear un form en una libreria Dll
 
hola a todos, tengo un problema: al cargar una dll estatica me devuelve un error "CoInitialize".

les comento, la dll crea un formulario, el cual contiene un adoquery conectado a sqlserver. Por lo que veo ese es el problema, porque al quitarle el query me muestra el formulario sin errores.

Lo que intento hacer es un formulario que muestre un bdgrid con el resultado de una consulta sql, el cual usaria en varios proyectos (por eso decidi usar una dll).

agradeceria a quien me pudiera dar una mano en esto.:confused:

ContraVeneno 06-10-2008 23:02:53

pues mas bien tendrías que analizar que tienes en el "Auto-Create" y / o como estas creando el TQuery.

Por que a mi que tengo mas o menos lo mismo, no me da ningún problema.

seoane 06-10-2008 23:17:32

Para poder usar un AdoQuery primero hay que llamar a la función CoInitialize (si es que el error lo dice todo ;) ). Esta función hay que llamarla una vez por cada thread. Normalmente, si estas creando una aplicación con formularios usando la VCL, delphi ya llama la función CoInitialize para el thread principal. Pero la cosa cambia si estas creando una aplicación de consola, utilizas el query dentro de un thread o, como puede ser tu caso, cargas tu dll en una aplicación que no ha llamado a esa función.

En resumen llama a la función CoInitialize :)

miguelcba 06-10-2008 23:51:38

Cita:

Empezado por ContraVeneno (Mensaje 318521)
pues mas bien tendrías que analizar que tienes en el "Auto-Create" y / o como estas creando el TQuery.

Me falto un detalle, es la primera vez que intento realizar una dll con un form.

Código Delphi [-]Library buscar;
uses
sharemem,
buscar1 in 'buscar1.pas' {Form1};
{$R *.res}
exports
buscaroperador;
begin

end.




no se si es correcta la forma en que intento hacerla:
pero por ejemplo al colocarle el adoquery me tira el error,

Código Delphi [-]unit buscar1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB;
type
TForm1 = class(TForm)
ADOQuery1: TADOQuery;
private
{ Private declarations }
public
{ Public declarations }
end;
function buscaroperador:string;stdcall;
var
Form1: TForm1;
implementation
{$R *.dfm}
function buscaroperador:string;stdcall;
var
formulario:tform1;
begin
Application.Initialize;
formulario:=tform1.Create(application);
if formulario.ShowModal=mrok then
result:='aa';
end;
end.

ContraVeneno 06-10-2008 23:55:30

el problema va más por lo que menciona maese Seoane


La franja horaria es GMT +2. Ahora son las 18:23:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi