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 : 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 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
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 : 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 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