如何使COM代理多个实例?

时间:2019-01-30 15:55:21

标签: com com-interop

我有一个C#32位COM DLL,它使用Hosting a .NET DLL as an Out-Of-Process COM Server (EXE)中所述的'DllSurrogate'方法与C#64位exe通讯。

我需要此设置,因为32位C#与旧版32位C ++ dll通讯。

我认为一切正常,但是我刚刚意识到,当您创建64位exe的第二个实例时,不会获得第二个“ DLL Host”(COM代理)进程。这对我的应用程序没有好处。

这是Windows桌面应用程序,我需要知道,如果用户多次启动它,它们都将在各自独立的进程中运行。否则,旧版dll中的数据可能会损坏,并且肯定会遇到32位进程内存限制。

使用AppId DllSurrogate key注册代理。

通过调用CoCreateInstance在64位exe中创建32位类实例。

从一些Google搜索中看来,解决我的问题的方法应该是使用REGCLS Enumeration中的 REGCLS_SINGLEUSE 键。但是,我看不到在哪里提供该密钥。另外,我注意到在此枚举中有一个单独的 REGCLS_SURROGATE 键。我希望这并不意味着DLL Surrogate和Single Use是互斥的!

任何想法都将受到欢迎。

0 个答案:

没有答案