【问题标题】:JNA-Mapping Delphi FunctionJNA-映射德尔福函数
【发布时间】:2009-09-25 07:22:08
【问题描述】:

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

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

【问题讨论】:

  • 从 D2009 开始,字节字符。你用的是什么版本的 Delphi?

标签: java delphi map jna


【解决方案1】:

为 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);

【讨论】:

    【解决方案2】:

    感谢您的回答!

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

    我现在尝试了这个映射:

    Java 代码:

    int getData(String inData1, 字符串 inData2, 字节[] 数据, 字节缓冲区 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,作者不会更改它。 :-(

    【讨论】:

    • 对不起,我没有看到你的答案。你解决问题了吗?您是否尝试使用 CharBuffer 为 InData1 和 InData2 在末尾添加零以防 jna 不为空终止字符串?
    猜你喜欢
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2011-10-04
    相关资源
    最近更新 更多