ほとんどのJNAドキュメントは、DelphiではなくCを使用していることを前提としているため、その関数と同等の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);