【发布时间】:2012-11-24 09:49:42
【问题描述】:
使用 JNA,我正在加载一个用 C++ 编写的 dll 并调用该 C++ 函数中存在的函数:
int xxfunction(Char* ptr){...}
这里我需要发送一个 char 数组,以便函数为其赋值。基本上我需要通过引用传递 char 数组。
根据 JNA 文档,Java 中的 C++ char* 等效为 String,因此我创建了一个 String 对象并将其传递给如下所示的函数:
Java 函数声明:
interface foo extends Library
{
....//loading dll and other work
int xxfunction(String chararray);//function declaration
}
Java 函数调用:
public static void main(String args[])
{
String str="abcd";
int i=fooinstance.xxfunction(str);//function call
}
但是当我执行这段代码时,它给了我:
Java 运行时环境检测到一个致命错误: 无法写入核心转储。默认情况下不启用小型转储 Windows 的客户端版本
崩溃发生在 Java 虚拟机之外的本地代码中。请参阅有问题的框架以了解报告错误的位置。
那么在函数需要 char 指针的地方将 String 作为参数传递是正确的方法吗? java中的C++ char等价物是byte,所以需要传递byte数组作为参数吗?
我什至无法将指针对象从 JNA 传递给函数,因为它给了我IllegalargumentException。
【问题讨论】: