如何使用JNA映射此功能:
德尔福代码:
function getData(InData1: PChar;
InData2: PChar;
Data: TArray16;
var OutData1: PChar;
var OutData2: PChar): integer; stdcall;
with: TArray16 = array[0..15] of char;
返回的int值对于Error可以是0,对于正确执行可以是1;
我的建议是:
Java代码:
int getData(String inData1,
String inData2,
byte[] data,
byte[] outData1
byte[] outData2);
问题是dll的函数返回0.我也尝试过其他数据类型,但它没有使用jet。我认为问题是dll函数无法写入参数outData1和outData2。
谁可以帮助我?....谢谢!
答案 0 :(得分:0)
为OutData1和OutData2
尝试java.nio.ByteBuffer
修改
你能用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);
答案 1 :(得分:0)
感谢您的回答!
“为OutData1和OutData2尝试java.nio.ByteBuffer”
我现在尝试了这个映射:
Java代码:
int getData(String inData1, 字符串inData2, byte []数据, ByteBuffer outData1 ByteBuffer outData2);
该函数现在返回1(也许现在已经分配了足够的内存),但是写入outData1和outData2的数据总是相同的,虽然它依赖于inData1,inData2和数据(我已经改变了它5)用其他值测试它的时间)。
我使用了这个函数一个ByteBuffer b:
b = ByteBuffer.allocate(int capacity)和b.array()返回一个字节数组。
*“你能用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);“*
不,我不能。这不是我的dll,作者不会改变它。 : - (