0

我们的一些产品包含由第三方应用程序加载的插件 DLL。我们想要在我们的插件中做的一些事情似乎与应用程序进程冲突。尽管我们认为即使存在这些冲突,我们的插件也不会有任何问题,但只要他们的应用程序出现问题,他们通常不会提供支持,直到插件被删除。

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

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

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

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

虽然这将使一切保持连续运行,但不幸的是,每次调用都会涉及多个上下文切换,这可能会随着调用次数的增加而导致性能问题。

4

1 回答 1

0

你不能吃你的蛋糕,也吃它。DLL 可以通过 rundll32 或类似的东西执行,但它不会像你的插件那样做任何有用的事情。

当然你可以包装它:如果它是一个 COM inproc 服务器,你可以从 typelib 生成一个 EXE 服务器,然后使用那个 DLL 实现它。这听起来很无缝。对于常规 DLL,您必须提供从 COM 获得的所有进程间内容。

于 2013-06-21T19:38:41.110 回答