1
5
在JNI文献中 例外 似乎专门用于引用Java异常。本机代码中的意外事件称为 . JNI显式地不要求jvm检查编程错误。如果发生编程错误,则行为未定义。不同的jvm可能有不同的行为。
悬而未决的
,只在本机代码返回到Java调用方时抛出。本机代码可以检查
|
2
24
Java编译器不理解C++异常,所以您必须同时使用Java和C++异常。幸运的是,这并不太复杂。首先,我们有一个C++异常,告诉我们是否发生了Java异常。
我们也有一个C++异常来抛出新的Java异常:
通过上述功能,在C++代码中很容易使用Java/C++混合异常,如下所示。
如果你真的很有雄心壮志,你就有可能
|
3
3
我认为这是不明确的行为。将异常传播回C代码(这就是运行JVM的原因)是未定义的行为。 在Windows上,编译器必须使用微软的结构化异常处理来实现异常,因此C++异常将通过C代码安全地被捕获。 ,C代码是 不是写在心里的例外
在其他平台上,嗯,我不知道,但不能再漂亮了。在编写JNI代码时,我将每个C++函数封装在一个
|
4
3
我猜你的JVM会崩溃。本地C++异常不会通过JNI传播到Java中。其中一个原因是JNI是C接口,C对C++异常一无所知。 您必须做的是在进入JNI代码的C层之前捕获C++异常,并使JNI C函数返回一个错误代码。然后您可以检查Java内部的错误代码,并在必要时抛出Java异常。 |
5
2
JNI使用c函数与本机代码接口。C不能正确地处理异常,因为它不知道它们的存在。因此,您必须捕获本机代码中的异常并将其转换为java异常,否则jvm将崩溃。(这是因为java异常只在本机代码返回java时抛出) |
PPP · Kotlin JNI中Long类的名称是什么? 2 年前 |
Gazouu · JNI使用。C中的hpp库++ 6 年前 |
Alexzander Bond · JNI返回随机整数 6 年前 |