ほとんどJNAドキュメントでは、C、いないデルファイを使用していると仮定し、そのための機能をCと同等で始まる:
int DoX(const void* InputBuffer,
unsigned int InputBufferSize,
void* OutputBuffer,
unsigned int* OutputBufferSize);
あなたはまた、右の呼び出し規約を取得したいと思います。 Delphiのデフォルトはレジスタです。これはおそらくあなたが望むものではありません。代わりにstdcallを使用してください。それは他のすべてのDLLが使用するものです。
Javaには、使用しているものと同等の符号なしタイプがありません。したがって、unsignedを無視して開始してください。これにより、InputBufferSize
はint
となります。あなたの関数はブール値を返すので、戻り値の型としてboolean
を使用してください。 JNAはByReference
クラスの子孫を介して基準によって種類を渡すサポートしているため、OutputBufferSize
ためIntByReference
を使用しています。
最後にポインタです。あなたはバイト配列だと言いました。なぜ私はあなたがDelphiコードでそのように宣言しないのか困惑しています。 PByte
を使用するか、新しいPByteArray
型を宣言して使用してください。 (この変更は、はるかに便利その機能を実現するようになります。)Javaでは、バイト配列としてそれらを宣言してみてください。だから、最終製品:
boolean DoX(byte[] InputBuffer,
int IntputBufferSize,
byte[] OutputBuffer,
IntByReference OutputBufferSize);