Str*_*ill 8 java exception jna
我有一个关于处理JNA下库引发异常的快速问题...
当我在底层本机代码中抛出异常时,JNA会收到无效的内存访问错误.我假设这是因为C库不能通过它的堆栈抛出异常(它实际上是C++/CLR但是有C输出)?那么有没有真正的方法来报告Java的异常?或"它应该工作",我只是做了一些令人难以置信的错误?
DllExport void Initialize(char* dir)
{
throw gcnew System::Exception("Testing");
}
Run Code Online (Sandbox Code Playgroud)
Java能够检测到这些抛出的异常会很好,我想我实际上可以考虑将内存指针传递给我的所有C导出并检查它们是否为null,但看起来像是一种迂回的方式.
C ++异常只能用C ++代码处理。绝不应该让它们脱离C ++世界(即,C ++代码的C接口永远不要让异常传播)。让C ++异常通过两个C ++模块之间的C代码层传播甚至是不安全的(例如,当C ++函数调用C函数时,C函数又调用C ++函数)。
原因之一是,没有关于如何实现C ++异常的标准,因此,如果由同一编译器(相同版本)进行编译,则C ++模块仅是二进制兼容的。因此,无法设置任何其他语言的代码来处理C ++异常。
在这种情况下(C ++库,C接口,从Java调用),您将必须捕获C ++异常,通过C接口传播信息(例如,通过使用错误返回码),在Java中进行检查并在其中抛出异常。
| 归档时间: |
|
| 查看次数: |
1813 次 |
| 最近记录: |