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"
unsigned char FunctRandom(unsigned char *random, unsigned char length);
les valeurs retour :
1 2
| #define OK 0x55
#define NOK 0xAA |
un exmple en C de l'appel de la fonction
1 2
| unsigned char random[16];
while (FunctRandom(random, 16) != OK); |
et en delphi
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 ?
Partager