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