如何让COM为每个实例生成一个单独的进程外服务器?

时间:2012-06-28 22:27:33

标签: windows com

我有一个使用外部COM组件的服务器应用程序,它似乎是泄漏内存。我没有这个组件的源代码,也没有调试或修改它的任何方法,并且在足够的时间之后它使服务器瘫痪。

我想将COM功能移出进程,这并不困难(通过CLSCTX_LOCAL_SERVER而不是CLSCTX_INPROC_SERVERCoCreateInstance)但是有一个问题:服务器正在从不同的线程创建COM对象的多个实例,其时间可能使得有可能最终不会有0个实例处于活动状态的时间长到足以泄漏足够的内存以使其崩溃-process host。

显而易见的解决方案是使每个CoCreateInstance生成其自己的进程外服务器。但是我在其上看到的所有资源including one question on SO似乎都要求您访问创建COM对象的DLL的源代码。情况并非如此。

有没有办法让每次调用CoCreateInstance产生一个新的进程外代理,只有你能够改变的是调用CoCreateInstance的程序的代码。 ?

(请不要使用基于C ++模板库的解决方案,因为有问题的服务器是用Delphi编写的。)

0 个答案:

没有答案