使用 JNA,我正在加载一个用 C++ 编写的 dll 并调用该 C++ 函数中存在的函数:
int xxfunction(Char* ptr){...}
在这里,我需要发送一个 char 数组,以便该函数为其赋值。基本上我需要通过引用传递 char 数组。
根据 JNA 文档,char*
Java 中的 C++ 等效项是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等价物是字节,所以我需要将字节数组作为参数传递吗?
我什至不能将指针对象从 JNA 传递给函数,因为它给了我IllegalargumentException
.