PDA

Ver la Versión Completa : Crear un form en una libreria Dll


miguelcba
06-10-2008, 22:58:55
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
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 [-] (http://www.clubdelphi.com/foros/#)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 [-] (http://www.clubdelphi.com/foros/#)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