Traduction C++/Delphi DLL et function Callback
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:
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:
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