La plupart des documents de la JNA suppose que vous utilisez C, pas Delphi, donc commencer par le C équivalent à cette fonction:
int DoX(const void* InputBuffer,
unsigned int InputBufferSize,
void* OutputBuffer,
unsigned int* OutputBufferSize);
Vous aurez également besoin d'obtenir la convention d'appel droit. La valeur par défaut de Delphi est registre, ce qui n'est probablement pas ce que vous voulez. Utilisez stdcall à la place; c'est ce que toutes les autres DLL utilisent.
Java ne possède pas d'équivalents de type non signés par rapport à ceux que vous avez utilisés, alors commencez par ignorer le non-signe. Cela fait InputBufferSize
un int
. Votre fonction renvoie un résultat booléen, utilisez donc boolean
pour son type de retour. JNA prend en charge le passage des types par référence à travers les descendants de la classe ByReference
, utilisez donc IntByReference
pour OutputBufferSize
.
Enfin sont les pointeurs. Vous avez dit que ce sont des tableaux d'octets, donc je ne comprends pas pourquoi vous ne les déclarez pas ainsi dans votre code Delphi. Utilisez PByte
ou déclarez un nouveau type PByteArray
et utilisez-le. (Cette modification rendra l'implémentation de cette fonction beaucoup plus pratique.) En Java, essayez de les déclarer comme des tableaux d'octets. Ainsi, le produit final:
boolean DoX(byte[] InputBuffer,
int IntputBufferSize,
byte[] OutputBuffer,
IntByReference OutputBufferSize);