gpt4 book ai didi

java - JNA - 在从 DLL 传回的 C++ 实例上调用方法

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

假设我有一个带有单个导出方法的 C++ DLL,例如:

CustomerProcessor* getInstance();

即它只是返回实际包含我需要调用的方法的类的实例。

我知道我可以使用 JNA(扩展 com.sun.jna.Library)将 getInstance() 方法映射到 Java 中的一个类,将返回的 CustomerProcessor 实例存储在 com.sun.jna.Pointer 中。

然后我能否以某种方式将它映射到 CustomerProcessor 类,以便我可以调用它的方法(如果可以,如何调用)?

最佳答案

对于任意 type* function() 定义,您可以使用 JNA 将方法映射为返回 com.sun.jna.Pointer,但您不会能够从 JNA 调用 C++ 对象上的方法。

一个简单的解决方法是编写一个 C 接口(interface)库,它只为您调用对象上的方法...因此,如果您有一些成员函数 foo(),您可以导出一个C++ 代码中的 C 方法:

extern "C" void bar(type* var){
var->foo();
}

显然这会为您增加一些工作...但我怀疑切换到 JNI 的开销将大致相同。

关于java - JNA - 在从 DLL 传回的 C++ 实例上调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1873194/

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