java - jni入门问题

标签 java c dll java-native-interface native-code


我开始研究 JNI,据我了解,如果加载的 dll 出现问题,jvm 可能会当场终止。
IE。该过程无法得到保护,例如就像捕获异常时一样。
所以如果我的理解是正确的,我的问题是在使用 jni 时是否有针对这种情况的标准方法/模式。
或者换句话说,使用 jni 的进程是否旨在避免这些问题? 或者预计不会出现此类问题?

谢谢。

最佳答案

是的,JVM 将终止,这是 JNI 代码很难调试的原因之一。如果您使用的是 C++ 代码,则可以使用异常,然后将它们映射到 Java 异常,这至少为您提供了一定程度的安全性,但对诸如错误的内存访问等问题没有帮助。

从架构的角度来看,我建议尽可能将您的代码与 JNI 分离。创建一个完全可从 C++/C 测试的类/过程结构,并让 JNI 代码仅执行所有转换工作。如果 JVM 然后崩溃,您至少知道必须查看的位置。

关于java - jni入门问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4961917/

相关文章:

c++ - Qt 造物主 "No such file or directory"

delphi - 如何过滤 Windows 中执行的应用程序?

java - 处理频繁变化的时区的最佳实践是什么

java - 如果一个类被标记为@Transactional,是否可以省略通常的事务管理样板代码?

java - Spring、Interceptor的extractPathPatterns功能无法正常工作

c - waitpid() 的参数

java - 这两个代码的输出是什么?

java - 在需要 .txt 文件的 html 中嵌入 .jar 文件 (java)

c - 为什么 ARM gcc 在函数开始时将寄存器 r3 和 lr 压入堆栈?

c++实现在dll外部定义的虚拟类,在dll中