1

この関数をJNAでマップするにはどうすればよいですか?

Delphiコード:

function getData(InData1: PChar; 
                 InData2: PChar; 
                 Data: TArray16; 
                 var OutData1: PChar; 
                 var OutData2: PChar): integer; stdcall;

with: TArray16 = array[0..15] of char;

返されるint値は、エラーの場合は0、正しい実行の場合は1です。

私の提案は:

Javaコード:

int getData(String inData1, 
            String inData2, 
            byte[] data, 
            byte[] outData1
            byte[] outData2);

問題は、dllの関数が0を返すことです。他のデータ型も試しましたが、うまくいきませんでした。問題は、dll関数がパラメーターoutData1とoutData2に書き込めないことだと思います。

誰が私を助けることができますか?....ありがとう!

4

2 に答える 2

0

ご回答ありがとうございます。

「OutData1 と OutData2 に java.nio.ByteBuffer を試してください」

私は今このマッピングを試しました:

Java コード:

int getData(String inData1, String inData2, byte[] data, ByteBuffer outData1 ByteBuffer outData2);

関数は 1 を返すようになりました (おそらく十分なメモリが割り当てられています) が、inData1、inData2、およびデータに依存しますが、outData1 と outData2 に書き込まれたデータは常に同じです (テストのために 5 回変更しました)。他の値でそれを)。

私はこの関数をByteBuffer bに使用しました:

b = ByteBuffer.allocate(int capacity) および b.array() を使用して、バイト配列を取得します。

*"そして、この関数に相当するものを C++ で記述できますか? 次のような場合:

int getData(const char* InData1, const char* InData2, char[] データ, char** OutData1, char** OutData2); マッピングは次のようになります

int getData(String InData1, String InData2, ByteBuffer Data, ByteByReference OutData1, ByteByReference OutData2);"*

いいえ、できません。これは私の dll ではなく、作成者はそれを変更しません。:-(

于 2009-09-28T06:03:03.413 に答える
0

java.nio.ByteBufferOutData1 と OutData2 を試してください

編集

この関数に相当するものを C++ で記述できますか? このような場合:

int getData(const char* InData1, const char* InData2, char[] Data, char** OutData1, char** OutData2);

マッピングは次のようになります

int getData(String InData1, String InData2, ByteBuffer Data, ByteByReference OutData1, ByteByReference OutData2);
于 2009-09-25T18:46:11.247 に答える