gpt4 book ai didi

java - 从 Java 按名称加载 C++ 类

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

假设我有一个用 Java 编写的框架和一些执行资源密集型工作的 C++ 代码。 — 框架根据数据库配置初始化处理链。 (这条链的)处理单元是用 C++ 编写的。每个单元实现以下接口(interface):

class IModule {
public:
virtual ~IModule() {};
virtual bool setConfig(ModConfig* config) = 0;
virtual map<string*,string*>* getStatus() = 0;
};

我希望开发人员能够在 C++ 中实现 IModule 接口(interface),并创建一个包含类名的数据库条目。然后 Java 框架会自动加载该类。 — 目标一定不是用 C++ 或 Java 编写额外的绑定(bind)代码。正如您在接口(interface)中看到的那样,方法 setConfig() 接收一个 ModConfig 类型的对象。这意味着必须可以在 Java 中创建该 C++ 对象的实例。

我评估了以下技术: - JNA:仅 C -> 需要附加绑定(bind)代码 - JNIEasy:直接将对象映射到对象 - SWIG:将对象直接映射到对象 - BridJ:直接将对象映射到对象 - JNI:也许是问题的解决方案?

总结: - 从 Java 按名称加载 C++ 类。 - 在 Java 中实例化 C++ 对象。

我不期望任何人向我提供代码。给我指出正确的方向(技术)。

提前致谢

最佳答案

您的问题是操作系统特定的(或者我误解了)。我不明白在运行时加载 C++ 类对你意味着什么(在纯 C++11 中当然不可能,你需要操作系统支持)。

您可以使用 dlopen 在 Posix 系统上加载可动态链接的共享对象然后使用 dlsym 在其中获取一个符号的地址.不要忘记声明extern "C"您要查找的 C++ 函数。

如果您关心 C++ 类,那么也许还可以查看 Qt 的 QlibraryQPluginLoader寻找灵感。

阅读更多关于 plug-ins 的信息.

关于java - 从 Java 按名称加载 C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9564205/

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