是否有任何已知的技术可以使用将 DLL 插件分离到它自己的进程中?



我们的一些产品包含由第三方应用程序加载的插件DLL。我们想在插件中做的一些事情似乎与应用程序过程相冲突。虽然我们不认为我们的插件有任何问题,即使有这些冲突,每当他们的应用程序有问题,他们通常不会提供支持,直到插件被删除。

我有兴趣看看是否有任何方法,我们可以有效地加载我们的插件在自己的过程中,同时仍然提供无缝的体验。DLL接口基本上完全是应用程序在某些事件上对插件的调用,以及插件可以用来与应用程序通信的接口。

编辑:不小心提交得太早了…

我最初的想法是创建一个shim插件DLL,生成一个单独的可执行文件,加载实际的插件DLL。这两个进程将使用共享内存进行通信,因此进程将类似于

  • 插件调
  • 向共享内存写入参数
  • 设置事件唤醒进程
  • 进程唤醒并读取参数并发送给实际的插件。
  • 响应以类似的方式返回

虽然这将保持所有内容连续运行,但不幸的是,它将涉及每个调用的多个上下文切换,随着调用数量的增加,可能会导致性能问题。

鱼和熊掌不可兼得。DLL可以通过rundll32或类似的东西执行,但它不会做任何有用的插件。

当然你可以包装它:如果它是一个COM inproc服务器,从typelib中你可以生成一个EXE服务器,然后使用DLL实现它。听起来天衣无缝。对于普通的dll,你必须提供所有你能从COM得到的进程间的东西。

最新更新