Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-10-2003
Sergio Sergio is offline
Registrado
 
Registrado: jun 2003
Ubicación: Valencia
Posts: 8
Poder: 0
Sergio Va por buen camino
Ayuda para detectar un fallo en diseño de dll

Hola amigos del foro,

Estoy diseñando una dll que, entre otras cosas, abre un Form donde se realiza el Log-In a una aplicacion (Host de la dll). Esta dll ya me funciona en otro aplicación.

Copié el código y el Formulario para diseñar mas o menos lo mismo pero en otra dll nueva, he repasado el código mil veces y no encuentro el fallo.

function EntradaUser(hWnd: THandle): Boolean;
var
frmEntrada: TfrmEntrada;
begin
Application.Handle := hWnd;
frmEntrada := TfrmEntrada.Create(Application);
result := true;
end;

Cuando intenta crear el formulario da el siguiente error:

...raised exception class EOleSysError with message: "No se ha llamado a CoInitialize"...

Gracias de antemano.
Responder Con Cita
  #2  
Antiguo 17-10-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Este error me ha sucedido, pero no en una dll, la solución fue agregar la línea
Código:
Application.Initialize;
antes del Application.Run.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 17-10-2003
Sergio Sergio is offline
Registrado
 
Registrado: jun 2003
Ubicación: Valencia
Posts: 8
Poder: 0
Sergio Va por buen camino
si, pero esta linea ya está en la aplicacion host, en el código de la dll no hay ningún Application.Run,

¿debería haberlo?

gracias por tu ayuda, este es el código de la dll:

library UsersMNM;

uses
SysUtils,
Classes,
FormEntrada in 'FormEntrada.pas' {frmEntrada};

{$R *.res}

exports
EntradaUser;
end.

------------------------

unit FormEntrada;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, DBCtrls;

type
TfrmEntrada = class(TForm)
ADOConnection1: TADOConnection;
DBListBox1: TDBListBox;
DBListBox2: TDBListBox;
ds_centros: TDataSource;
ds_usuarios: TDataSource;
sql_centros: TADOQuery;
sql_usuarios: TADOQuery;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;


function EntradaUser(hWnd: THandle): Boolean; StdCall;

implementation

{$R *.dfm}

function EntradaUser(hWnd: THandle): Boolean;
var
frmEntrada: TfrmEntrada;
begin
Application.Handle := hWnd;
frmEntrada := TfrmEntrada.Create(Application);
result := true;
end;

procedure TfrmEntrada.FormCreate(Sender: TObject);
begin
ADOConnection1.Open;
sql_centros.Open;
end;

procedure TfrmEntrada.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ADOConnection1.Close;
Action := caFree;
end;

end.
Responder Con Cita
  #4  
Antiguo 17-10-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Sergio, no sé mucho de esto pero muchos controles necesitan que se inicialice el manejo de COM y para ello se usa CoInitialize. Supongo que Application.Initialize se encarga de ello normalmente pero esto no ha sucedido para el momento en que creas el formulario. ¿Por qué no pruebas simplemente a hacerlo tú mismo al comienzo del DLL? Me parece que CoInitialize está definido en la unidad ComObj y, hasta donde sé, se puede llamar repetidas veces sin problemas, es decir, que cuando Application lo haga no entrará en conflicto con la llamada que hayas hecho desde el DLL.

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 05:44:28.


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
Copyright 1996-2007 Club Delphi