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