- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在通过 JNA 使用 C++ DLL。我想在Java中调用下面的方法,将我想读取的信息写入szVisor。
long FAR PASCAL DLL_GetLocalPortTS(char* szEquip,char* szVisor){
...
}
Java接口(interface)实现如下:
public interface IE2E extends Library {
// Instancia de la dll, carga la librería
IE2E INSTANCE = (IE2E) Native.loadLibrary("e2e", IE2E.class);
...
int GetLocalPortTS(String equip, String[] equipInfo);
}
方法调用:
String equip = "equipID";
String equipInfo = "";
String[] rEquipInfo = {equipInfo};
IE2E sdll = IE2E.INSTANCE;
int ret = sdll.GetLocalPortTS(equip, rEquipInfo);
此执行在 JRE 中给我带来了 fatal error ,但如果我将两个参数都作为 String 或 String[] 则不会。但是,如果我同时使用这两个字符串,它不会覆盖 equipInfo 并且我得不到我想要的信息;如果我将两者都用作数组,则该方法不会获取装备值并且不会运行。
欢迎任何对此的见解。
最佳答案
问题是C代码要写入szVisor
,对吧?我猜它会做这样的事情:
long GetLocalPortTS(char* szEquip,char* szVisor){
strcpy(szVisor, "I am C code result :)");
return 0;
}
如果您从 Java 端传入一个字符串,那么内存归 JVM 所有,因此写入它会导致崩溃。你需要的是 Memory对象,它是 C 代码可以安全写入的包装的 malloc 内存位。
您的新 JNA 界面如下所示。我已经注释掉了旧版本,所以你可以比较:
public interface IE2E extends Library {
IE2E INSTANCE = (IE2E) Native.loadLibrary("e2e", IE2E.class);
//int GetLocalPortTS(String equip, String[] equipInfo);
int GetLocalPortTS(String equip, Memory equipInfo);
}
调用它的代码如下,256 是一个占位符。确保分配足够的空间来将字符串写入:
String equip = "equipID";
String equipInfo = "";
//String[] rEquipInfo = {equipInfo};
Memory rEquipInfo = new Memory(256);
IE2E sdll = IE2E.INSTANCE;
int ret = sdll.GetLocalPortTS(equip, rEquipInfo);
要将结果用作字符串,您可以这样做:
rEquipInfo.getString(0);
如文档所述,Memory 的 finalize()
方法会自动调用 malloc 内存上的 free,因此无需担心内存泄漏。
关于java - JNA:EXCEPTION_ACCESS_VIOLATION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29538130/
我在使用 JavaFX 桌面应用程序时遇到问题,特别是在 3D 渲染功能方面。每次我尝试构建和启动 JavaFX 应用程序时,JVM 都会崩溃,并且会收到类似于以下错误的错误: # # A fatal
所以我正在使用 JavaCV 并尝试从 mp4 文件中捕获帧作为图像。当我尝试保存图像并且无法在任何地方找到解决方案时,我不断收到 EXCEPTION_ACCESS_VIOLATION。 OpenCV
我正在开发一个eclipse插件,并使用eclipse应用程序运行/调试配置来运行它以进行测试。自从我更改为JDK1.8以来,嵌套的Eclipse应用程序崩溃了。如果尝试使用ctrl + click从
当我尝试从 Openbravo POS 打印票据时出现此 hs_err_pid: # # A fatal error has been detected by the Java Runtime Env
当我使用 eclipse 运行我的项目的 java bean 时,我得到了这个崩溃报告。我完全不知道它是什么以及如何调试。谁能告诉我调试这个的可能方法? # # An unexpected error
我用JNA在libpotrace.dll中调用了这个函数,这个函数是: potrace_state_t *potrace_trace(const potrace_param_t *param, con
我正在创建一个小实用程序,用于使用 jpcap 将各种数据有效负载写入 pcap 转储文件。对于每个有效负载,我都按照“通过网络接口(interface)发送数据包”示例中的描述创建一个数据包并发送它
这是我尝试安装MATLAB时Java运行时环境返回的完整错误消息: # A fatal error has been detected by the Java Runtime Environme
我是 JNI 的新手,正在尝试使用 Windows 7 和 cygwin 的 gcc 编译器创建一个简单的 Hello World 程序。这是各种组件: 你好.java: public class H
我正在通过 JNA 使用 C++ DLL。我想在Java中调用下面的方法,将我想读取的信息写入szVisor。 long FAR PASCAL DLL_GetLocalPortTS(char* szE
我刚刚下载了 Blender 2.75a,它所做的只是打开一个控制台窗口,显示“错误:EXCEPTION_ACCESS_VIOLATION” 控制台窗口不会关闭,也不会随任务管理器一起退出,当我尝试结
通过 LWJGL 使用 opencl 时,我收到以下错误消息: # # A fatal error has been detected by the Java Runtime Environment:
我们在我们自己的测试工具(基于 Java 的)中运行我们的测试集......随机测试失败......我们得到以下 JVM 失败错误......请帮助...... A fatal error has b
我的 Java UI 意外终止并转储了一个 hs_err_pid 文件。该文件显示“崩溃发生在本地代码的 Java 虚拟机之外”。 JNA 是我们使用的唯一本地代码。有谁知道任何可能导致此问题的 JN
我正在尝试实现一种使用 OpenGL 和 Java 中的 vertexBufferObjects 绘制一堆立方体的方法,但是在调用 glDrawArrays 命令时遇到了问题。 本质上,该程序所做的是
我可能在 Java 中遇到了一个奇怪的错误。当我运行以下代码时,出现“EXCEPTION_ACCESS_VIOLATION”异常。 我知道代码没有意义(就逻辑而言),因为它是我最初编写的代码的子集。如
我目前正在尝试按照名为“学习 Libgdx 游戏开发”的书中的教程来学习 libGdx,并发现了一个奇怪的错误。 有一个名为 backToMenu 的函数: private void backToMe
今天在工作中,我的 eclipse 开始反复崩溃。打开它并开始编辑文件就足以在几分钟后崩溃。我重新安装了所有东西:Eclipse、Workspace、Java,但没有任何帮助。请尝试找出问题的根源,因
我一直在尝试让我的公司软件 (HP Operations Orchestra) 在重新安装后运行很多次,但我无法打开它。相反,它会在其目录中生成一个错误日志文件,其中包含以下内容: # # A fat
今天,我决定继续开发我为计算机科学类(class)创建的程序。运行它后,我在控制台中看到了这个: # # A fatal error has been detected by the Java Run
我是一名优秀的程序员,十分优秀!