从Java中按名称加载C++类
Load C++ class by name from Java
让我们假设我有一个用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中寻找灵感。
阅读有关插件的更多信息。
相关文章:
- std::原子加载和存储都需要吗
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 为什么加载SDF会导致Mobilizer创建闭环错误
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- 如何使用tinyxml2从XML加载父实体和子实体
- 如何在C++中使用pybind11加载一个pickle python列表
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- Python ctypes:不会按预期加载 dll
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 保存/加载大量短数组到二进制文件
- 使用 SDL2 和SDL_image C++加载图像
- 无法使用加载库卸载注入的 dll (C++)
- 是否有原子加载非原子值的函数?
- 将 bmp 文件加载到 TSpeedButton 中
- 如何使用Qt 3D库加载和显示搅拌机.obj源文件场景
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常