В большинстве документов JNA предполагается, что вы используете C, а не Delphi, поэтому начните с C, эквивалентного этой функции:
int DoX(const void* InputBuffer,
unsigned int InputBufferSize,
void* OutputBuffer,
unsigned int* OutputBufferSize);
Вы также захотите получить соглашение о вызовах правильно. По умолчанию Delphi - register , что, вероятно, не то, что вам нужно. Используйте взамен stdcall ; это то, что использует каждая другая DLL.
В Java нет эквивалентов без знака для тех, которые вы использовали, поэтому начните с игнорирования без знака. Это делает InputBufferSize
int
. Ваша функция возвращает логический результат, поэтому используйте boolean
для ее типа возврата. JNA поддерживает передачу типов по ссылке через потомков класса ByReference
, поэтому используйте IntByReference
для OutputBufferSize
.
Наконец указатели. Вы сказали, что это байтовые массивы, поэтому я озадачен, почему вы не объявляете их таким образом в своем коде Delphi. Либо используйте PByte
, либо объявите новый тип PByteArray
и используйте его. (Это изменение сделает реализацию этой функции более удобной.) В Java попробуйте объявить их как байтовые массивы. Итак, конечный продукт:
boolean DoX(byte[] InputBuffer,
int IntputBufferSize,
byte[] OutputBuffer,
IntByReference OutputBufferSize);