Probléme de création de TDatamodule dans une form incluse dans une Dll.
Bonjour,
Comme dit dans le titre, j'ai un petit probléme avec la création de TDatamodule dans une form elle-même contenues dans l'une de mes Dll et je ne rouve pas de piste de résolution...
Voici le code de ma fiche principale (Roxanne) qui initialise ma Dll (Ajax.dll):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| procedure TRoxanne.FormActivate(Sender: TObject);
var
HdleDll:Thandle;
result:Boolean;
ShowSiwah: function(AppHdle:integer):boolean;stdcall;
begin
ShowSiwah:=LierFct('Ajax.dll',HdleDll,'ShowSiwah');
if assigned(ShowSiwah) then
begin
result:=ShowSiwah(Application.MainForm.Handle);
Freelibrary(HdleDll);
end
else
Showmessage('Erreur de Chargement de la librairie dynamique');
end; |
Le code de la fonction "LierFct" qui se trouve dans une autre unité (Cadmos):
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| function LierFct(Dll:string;var HdleDll:Thandle;NomFct:string;IdxFct:integer=-1):Pointer;
begin
result:=nil;
HdleDll:=0;
HdleDll:=loadlibrary(PAnsichar(Dll));
if HdleDll=0 then
exit;
if IdxFct<0 then
result:=GetProcAddress(HdleDll, PAnsiChar(NomFct))
else
result:=GetProcAddress(HdleDll,PAnsiChar(IdxFct));
end; |
Le code de la Dll(Ajax) qui exporte ma fonction"ShowSiwah":
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
uses
SysUtils,
Classes,
forms,
Controls,
USiwah in 'USiwah.pas' {Siwah},
UPhobos in '..\..\Unite\UPhobos.pas',
UPwdDm in '..\..\Datamodule\UPwdDm.pas' {PwdDm: TDataModule},
UMoeDm in '..\..\Datamodule\UMoeDm.pas' {MoeDm: TDataModule};
var
OldAppHdle:longint=0;
{$R *.res}
function ShowSiwah(AppHdle:integer):boolean;stdcall;
var
F:TSiwah;
begin
OldAppHdle:=Application.Handle;
try
Application.Handle:=AppHdle;
F:=TSiwah.Create(Application);
try
if F.ShowModal=mrOk
then Result:=true
else
Result:=false;
finally
F.Free;
end;
finally
Application.Handle:=OldAppHdle;
end;
end;
exports
ShowSiwah; |
Cette focntion "ShowSiwah" permet l'affichage d'une boite de dialogue modale qui gère les logins d'un programme.
Cette fiche appelle, donc, une unité de fonctions générales "Phobos" et deux Tdatamodule qui connectent deux bases de données Access. Les modules et leurs fonctions ont été testés sans probléme. Les fonctions de Phobos également. A noter que les fonctions de phobos travaillent dans la boite de dialogue sans soucis. Mais dés que j'essaie de créer mes deux Tdatamodule, c'est la catastrophe!
"EOleSysError, CoInitialize() n'a pas été appelé"!
Le pas à pas me donne la création des modules comme source de probléme. J'ai également testé une simple fiche appelant une form dans une dll sur laquelle j'ai placé des composants ADO pour une connection directe aux bases avec la même erreur!
Quelqu'un aurait-il une voie de recherche, un exemple, un tuto, ou tout simplement un avis à me donner afin que je régle mon probléme?
D'avance merci pour votre aide
Cordialement,
Hauwke