从Java加载C ++类

时间:2012-03-05 09:20:50

标签: java c++ native

假设我有一个用Java编写的框架和一些C ++代码,它们负责资源密集型工作。 - 框架基于数据库配置初始化处理链。处理单元(该链)是用C ++编写的。每个单元都实现以下接口:

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

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

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

要点:   - 从Java加载C ++类。   - 用Java实例化C ++对象。

我不希望有人向我提供代码。请指出正确的方向(技术)。

提前致谢

1 个答案:

答案 0 :(得分:1)

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

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

如果您关注C ++类,那么也许也可以在Qt的QlibraryQPluginLoader中寻找灵感。

详细了解plug-ins