gpt4 book ai didi

java - JNA 捕获异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:42:25 24 4
gpt4 key购买 nike

我有一个关于处理 JNA 下的库抛出的异常的快速问题...

当我在底层 native 代码中抛出异常时,JNA 收到无效内存访问错误。我假设这是因为 C 库不能通过它的堆栈抛出异常(它实际上是 C++/CLR 但有 C 导出)?那么有没有真正的办法向Java报告异常呢?或者“它应该工作”而我只是在做一些非常错误的事情吗?

DllExport void Initialize(char* dir)
{
throw gcnew System::Exception("Testing");
}

如果 Java 能够检测到这些抛出的异常,那就太好了,我想我实际上可以考虑将内存指针传递到我所有的 C 导出并检查它们是否为空,但看起来像迂回的方式。

最佳答案

C++ 异常只能在 C++ 代码中处理。永远不应该允许它们脱离 C++ 世界(即,C++ 代码的 C 接口(interface)永远不应该让异常传播)。让 C++ 异常通过两个 C++ 模块之间的 C 代码层传播甚至是不安全的(例如,当 C++ 函数调用 C 函数时,C 函数又调用 C++ 函数)。

其中一个原因是没有关于如何实现 C++ 异常的标准,因此 C++ 模块只有在由同一编译器(同一版本)编译时才是二进制兼容的。因此无法设置任何其他语言的代码来处理 C++ 异常。

在这种情况下(C++ 库,C 接口(interface),从 Java 调用)你必须捕获 C++ 异常,通过 C 接口(interface)传播信息(例如,通过使用错误返回代码),在 Java 中检查它并抛出那里是个异常(exception)。

关于java - JNA 捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7231583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com