假设我有一个用 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 的 Qlibrary和 QPluginLoader寻找灵感。
阅读更多关于 plug-ins 的信息.
关于java - 从 Java 按名称加载 C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9564205/