首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >审咨委**论据

审咨委**论据
EN

Stack Overflow用户
提问于 2017-12-12 10:39:02
回答 1查看 555关注 0票数 2

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

代码语言:javascript
复制
int calledFunction(char **args);

主要的方法参数是String[],根据JNA文件String[]应该直接等同于char **

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

有什么想法吗?

JNA接口定义:

代码语言:javascript
复制
public interface TestDll extends Library {

    int calledFunction(String[] param);

}

用法:

代码语言:javascript
复制
public static void main(String[] args) {
    TestDll testDll = Native.loadLibrary("test_dll", TestDll.class);
    testDll.calledFunction(args);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-12 14:45:24

您应该创建一个比args更大的新数组(由2)

代码语言:javascript
复制
String[] new_str_array = new String[ args.length + 2 ] // +1 for program name, +1 for null
  • 一个管理主函数char **args的普通C函数,期望第一个字符串是程序名。
  • 指针数组必须由额外的空指针终止。

然后,你应该把程序名放在开头。

代码语言:javascript
复制
new_str_array[ 0 ] = "MyProgramExecutableName";

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

代码语言:javascript
复制
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指令)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47770535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档