JNA char **参数

时间:2017-12-12 10:39:02

标签: java jna

我需要使用字符串数组参数从java调用DLL函数。参数值必须与从命令行(main方法参数)传递给java程序的参数相同。该功能具有以下签名:

int calledFunction(char **args);

主要方法参数是类型String[],根据JNA documentationString[]应该直接等同于char **

但是当我从命令行直接将参数传递给DLL时,程序崩溃或DLL没有正确解释值(值没有意义)。

有什么想法吗?

JNA接口定义:

public interface TestDll extends Library {

    int calledFunction(String[] param);

}

用法:

public static void main(String[] args) {
    TestDll testDll = Native.loadLibrary("test_dll", TestDll.class);
    testDll.calledFunction(args);
}

1 个答案:

答案 0 :(得分:2)

你应该创建一个比var_dump(getConsecutiveDays('2017-12-12')); int(3) var_dump(getConsecutiveDays('2017-12-16')); int(1)

更大(比2更大)的新数组
args
  • 管理主函数的char ** args的常规C函数,期望第一个字符串是程序名。
  • 指针数组必须以额外的空指针
  • 终止

然后,您应该将程序名称放在开头

String[] new_str_array = new String[ args.length + 2 ] // +1 for program name, +1 for null

然后,复制传递给Java程序的args

new_str_array[ 0 ] = "MyProgramExecutableName";

然后使用for (int i = 0; i < args.length; i++) { new_str_array[ 1+i ] = args[ i ]; } 调用C函数,最后new_str_array(索引string)应该已正确设置为args.length + 1null指令)