从Java中按名称加载C++类

Load C++ class by name from Java

本文关键字:加载 C++ Java      更新时间:2023-10-16

让我们假设我有一个用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-only->需要添加绑定代码-JNIEasy:直接将对象映射到对象-SWIG:直接将对象映射到对象-BridJ:直接将对象映射到对象-JNI:也许是这个问题的解决方案?

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

我不希望任何人向我提供代码。只要给我指一个正确的方向(技术)

提前感谢

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

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

如果您关心C++类,那么也可以从Qt的Qlibrary和QPluginLoader中寻找灵感。

阅读有关插件的更多信息。