Bonjour,
j'ai recherché sur le forum ou google (sans succès) avant de poster ce message ici.

C'est tres simple, sauf pour moi, voila :
j'ai une dll ecrite en C, et j'essaie via delphi de la chargée et d'interfacer les fonctions exportées.

voici un exemple :
la déclaration de la fonction en C de la DLL qui genere un aléa de longueur "length" et et le stocke dans "Random"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
unsigned char FunctRandom(unsigned char *random, unsigned char   length);
les valeurs retour :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
#define OK 0x55
#define NOK 0xAA
un exmple en C de l'appel de la fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
unsigned char random[16];
while (FunctRandom(random, 16) != OK);
et en delphi
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
procedure executeRND;
type
   TFunctRandom = function (_Random : Pointer; _Length : Pointer) : Pointer ; cdecl;
   Trnd = array [1..8] of Byte; 
var
   random : ^Trnd ;
   length : ^integer ;
   GenRandom : TFunctRandom;
   DLLHandle : THandle;
   Status : Pointer
begin
   length^ := 8;
   DLLHandle := LoadLibrary(Pchar('maDLL.dll'));  
   if DLLHandle <> 0 then begin
      try
         @GenRandom :=   GetProcAddress(DLLHandle, 'RandomGen');
         Status := GenRandom(random ,length);
         {le tableau random est bien mise a jour et le status est OK}
      except
         FreeLibrary(CryptoDLLHandle);
      end;
   end;
   FreeLibrary(CryptoDLLHandle); 
end;
Au final je ne sais pas trop quel type mettre à random et length (pointer, PChar...) mais toujours est il que ca plante bien mechant a la sortie de la procedure executeRND...

Pouvez vous m'aiguiller s'il vous plait ?