JNA-Mapping Delphi函数

时间:2009-09-25 07:22:09

标签: java delphi map jna

如何使用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。

谁可以帮助我?....谢谢!

2 个答案:

答案 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,作者不会改变它。 : - (