我需要使用字符串数组参数从java调用DLL函数。参数值必须与从命令行(main方法参数)传递给java程序的参数相同。该功能具有以下签名:
int calledFunction(char **args);
主要方法参数是类型String[]
,根据JNA documentation,String[]
应该直接等同于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);
}
答案 0 :(得分:2)
你应该创建一个比var_dump(getConsecutiveDays('2017-12-12'));
int(3)
var_dump(getConsecutiveDays('2017-12-16'));
int(1)
args
然后,您应该将程序名称放在开头
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 + 1
(null
指令)