是否有任何已知的技术可以使用将 DLL 插件分离到它自己的进程中?
Are there any known techniques for using separating a DLL plugin into it's own process?
我们的一些产品包含由第三方应用程序加载的插件DLL。我们想在插件中做的一些事情似乎与应用程序过程相冲突。虽然我们不认为我们的插件有任何问题,即使有这些冲突,每当他们的应用程序有问题,他们通常不会提供支持,直到插件被删除。
我有兴趣看看是否有任何方法,我们可以有效地加载我们的插件在自己的过程中,同时仍然提供无缝的体验。DLL接口基本上完全是应用程序在某些事件上对插件的调用,以及插件可以用来与应用程序通信的接口。
编辑:不小心提交得太早了…
我最初的想法是创建一个shim插件DLL,生成一个单独的可执行文件,加载实际的插件DLL。这两个进程将使用共享内存进行通信,因此进程将类似于
- 插件调
- 向共享内存写入参数
- 设置事件唤醒进程
- 进程唤醒并读取参数并发送给实际的插件。
- 响应以类似的方式返回
虽然这将保持所有内容连续运行,但不幸的是,它将涉及每个调用的多个上下文切换,随着调用数量的增加,可能会导致性能问题。
鱼和熊掌不可兼得。DLL可以通过rundll32或类似的东西执行,但它不会做任何有用的插件。
当然你可以包装它:如果它是一个COM inproc服务器,从typelib中你可以生成一个EXE服务器,然后使用DLL实现它。听起来天衣无缝。对于普通的dll,你必须提供所有你能从COM得到的进程间的东西。
相关文章:
- 从C++本机插件更新Vector3数组
- 使用CMake创建QML插件
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- C++:如何读取分离变量,然后读取向量
- 分离一个静态常量 std::thread?
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 如何在 c++ 中将数据与文件流分离
- clang 插件:在编译过程中修改 AST
- 实现动态插件管理器
- 我想通过带有C++和Python的插件创建一个可扩展的应用程序
- Agora.io 虚幻引擎插件构建错误
- 使用带有C++对象和标准库容器的插件系统
- 运行命令 "rosbag play example.bag" 时出错。找不到与插件 rosbag/NoEncryptor 对应的库
- 编译 llvm 插件时出现问题:llvm/Config/llvm-config.h:没有这样的文件或目录
- 为什么堆栈和堆在内存中分离得如此之多?
- 具有可分离内核的 2D 模糊卷积
- 通过 Gazebo 世界插件将静态对象附加到机器人链接
- 如何为模块化应用程序实现C++插件系统
- 是否有任何已知的技术可以使用将 DLL 插件分离到它自己的进程中?