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):Le code de la fonction "LierFct" qui se trouve dans une autre unité (Cadmos):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Dll(Ajax) qui exporte ma fonction"ShowSiwah":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;Cette focntion "ShowSiwah" permet l'affichage d'une boite de dialogue modale qui gère les logins d'un programme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 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
Partager