1

我如何用 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 值可以是 0 表示错误或 1 表示正确执行;

我的建议是:

Java代码:

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

问题是dll的函数返回0。我也尝试了其他数据类型,但它没有工作。我认为问题在于dll函数无法写入参数outData1和outData2。

谁能帮帮我?....谢谢!!

4

2 回答 2

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 回答
0

谢谢您的回答!

“为 OutData1 和 OutData2 尝试 java.nio.ByteBuffer”

我现在尝试了这个映射:

Java代码:

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

函数现在返回1(也许现在已经分配了足够的内存),但是写入outData1和outData2的数据总是一样的,虽然它依赖于inData1、inData2和data(我已经改了5次来测试它与其他值)。

我使用了这个函数a 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,作者不会更改它。:-(

于 2009-09-28T06:03:03.413 回答