Bonjour voici mon probleme.
J'utilise depuis mon appli DELPHI 7, les services d'une dll compilée en C++ Builder 5.0 (dont j'ai déclaré les prototypes via les mots clefs external, cdecl et Cie ...).
L'appel d'un de ces services me pose problème :
Prototype C :
int _MaFonction (const unsigned char*, const unsigned char *, const long, unsigned char*, long, int* );
La déclaration du prototype dans DELPHI :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 function _Mafonction( const RF_CodeCmde : pByte; const BufferIn : pByte; const RF_TailleBufferIn : LongInt; RF_BufferOut : pByte; RF_TailleBufferOut : LongInt; var RF_Status:integer):integer; cdecl; external 'MaDll.dll';
Je peux bien appeler ce service mais le retour de la fontion est toujours négatif, comme s'il ne comprenait pas les valeurs passées. Voici un exemple :
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 var ret, status : integer; TailleQuestion, TailleReponse : LongInt; PReponse : ^Byte; pCodeService, pQuestion : ^Byte; begin TailleReponse := 3; GetMem (PReponse, TailleReponse*SizeOf(Byte)); GetMem (pCodeService, 1); pCodeService^ := $01; TailleQuestion := 1; GetMem (pQuestion, TailleQuestion); pQuestion^ := $81; ret := _PerformCommand(pCodeService, pQuestion, TailleQuestion, pByte(PReponse), TailleReponse, status); // Cet appel renvoie toujours un statut KO, ret <>1 et status <0 signifiant 'paramètres invalides' end;
J'ai tout inspecté au debuggeur sans rien remarquer de suspect. Je me pose donc 2 question :
- Le choix d'un pByte pour décrire un unsigned char * est il judicieux ?
- Faut il oui ou non garder le const devant les paramètres ?
Merci de vos réponses ....
Sebastien
Partager