我需要用字符串数组参数从java调用一个DLL函数。参数值必须是从命令行传递给java程序的相同参数(主方法参数)。该函数具有以下签名:
int calledFunction(char **args);主要的方法参数是String[],根据JNA文件,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);
}发布于 2017-12-12 14:45:24
您应该创建一个比args更大的新数组(由2)
String[] new_str_array = new String[ args.length + 2 ] // +1 for program name, +1 for null然后,你应该把程序名放在开头。
new_str_array[ 0 ] = "MyProgramExecutableName";然后,复制传递给Java程序的args
for (int i = 0; i < args.length; i++) {
new_str_array[ 1+i ] = args[ i ];
}然后用new_str_array调用C函数,最后一个string (在索引args.length + 1处)应该被正确地设置为null (由new指令)
https://stackoverflow.com/questions/47770535
复制相似问题