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

标签 java c++ native

假设我有一个用 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/

相关文章:

c++ - 为什么虚拟析构函数需要删除运算符

c++ - 为什么 perf -e cpu-cycles 在多次运行时报告不同的答案?

c++ - 线程安全设置

c++ - native C++ 中的渐变画笔?

c++ - 如何在三星 galaxy tab 等 Android 设备上运行 c 或 c++ 程序?

java - 如何在java中将视频文件压缩为3gp或mp4?

java - Docker:Play 框架应用程序退出,代码为 0

java - 如何阻止 JPopupMenu show() 在视觉上取消选择单击的列表项

java - 如何使用 Mockito 和 jUnit 模拟持久化和实体

crash - (Apple Silicon) (M1) 莫名其妙的 SIGBUS 崩溃