假设我有一个用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 ++对象。
我不希望有人向我提供代码。请指出正确的方向(技术)。
提前致谢
答案 0 :(得分:1)
你的问题是深度操作系统特定的(或我误解了它)。我不明白在运行时加载C ++类对你意味着什么(在纯C ++ 11中肯定是不可能的,你需要操作系统支持)。
您可以使用dlopen在Posix系统上加载动态可链接的共享对象,然后使用dlsym获取其中的符号地址。不要忘记声明extern "C"
要查找的C ++函数。
如果您关注C ++类,那么也许也可以在Qt的Qlibrary和QPluginLoader中寻找灵感。
详细了解plug-ins。