Bonjour,
Je sais que ce sujet a déjà été discuté plusieurs fois, mais je vous avoue qu'à force de travailler dessus je m'y perds.
Dans mon cas je souhaiterais travailler avec des instances de classes (objets) dans une dll.
Mon exe va créer l'instance le passer à une dll qui va faire un traitement.
Je travaille avec ShareMem pour la mémoire.
Les essais basics sont concluants, par contre dès que j'utilise l'opérateur "IS" le test renvoie en permanence "False".
Je pense avoir trouvé pourquoi, mais cela me pose problème, d'après mes recherches ça serait une histoire d'instance, la VCL aurait 2 instances, une pour l'exe une autre pour la DLL.
Par exemple
Et l'appel
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 library Dll; uses // FastMM4, System.Classes, Vcl.Dialogs, Vcl.Forms; {$R *.res} procedure Complex(L : TObject);stdcall; begin if L is TForm then showmessage('Ok') else showmessage('Pas ok') ; end; exports Complex;
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 procedure TffsIsOperator.Button2Click(Sender: TObject); var MaDLL : THandle; Proc : procedure (l : TObject); begin try MaDLL := LoadLibrary(PChar('Dll.dll')); @Proc := GetProcAddress(MaDLL, 'Complex'); Proc(self); finally FreeLibrary(MaDLL); end; end;
Partager