Salut, Je reposte a propos des pb traduction C++/ Delphi

Voila ce que j'ai dans un .h C++ permettant d'appelé une DLL C++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
struct Cbi{//callback information
	void	*handle;
	unsigned status;
	unsigned error;
	unsigned sensors;
};
 
typedef void (*Cbf)(Cbi&cbi);//callback function << J'ai du mal ca capté comment traduire ca
 
//open comm port, set a callback function and return a handle to an opaque structure
 
typedef int (*Open)(char*port, Cbf cbf, void*&handle);
J'ai Traduit ca en :

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
  sCbi = packed record
		handle : pointer;
		status : cardinal;
		error  : cardinal;
		sensors: cardinal;
  end;
 
TCbf = Procedure (var Cbi : sCbi); // ici j'ai de gros doute
 
  function dll_Open  (port : pchar; cbf : TCbf ; handle : pointer) : integer; cdecl; external 'tkt.dll' name 'open';
 
et j'appelle la dll de cette maniere :
 
procedure tkt_callback(var Cbi : sCbi);
begin
  showmessage('Callback Reached');
end;
 
procedure TForm1.BtnOpenClick(Sender: TObject);
var    tkt_handle : pointer;
begin
  dll_Open (pchar(EdComPort.Text), tkt_callback , tkt_handle);
end;
J'ai essayé differente approche pour appellé et declaré la traduction de la fonction open. Mais ca se traduit a chaque fois par une violation d'acces.
J'ai egalement essayé d'appel dll_open avec un nil pour callback, resultat idem.

J'ai egalement des doutes au nivo du CDECL, ne vaut il pas mieux utilisé STDCALL ? (je n'ai pas l'info sur comment est faite la DLL)
Comment le savoir d'ailleurs ?

Merci pour vos eclaircissements