我们有使用多个COM对象的C ++应用程序。 COM对象是基于.NET的(使用COM Interop)。
我需要将应用程序迁移到64位。我特别需要C ++应用程序为64位。我不想将所有.NET com对象重新编译为64位并提供两组DLL(32位和64位)。
我正在调查并发现我可以使用(注册表中的DllSurrogate)在32位代理进程中加载32位COM Dll。我知道如何做到这一点,但这意味着所有COM对象都将失去进程。
在C ++中我有代码: CoCreateInstance(CLSID_SomeClass,NULL,CLSCTX_INPROC_SERVER,IID_SomeInterface,(void **)& pobj);
它工作正常,但是一旦切换到CLSCTX_LOCAL_SERVER(并为DllSurrogate添加注册表项),它就找不到接口(错误0x80004002)。我检查了注册表,发现当注册.NET COM DLL时,它会添加ClsID注册表项,但不会添加Interface和TypeLib注册表项。
问题是,如何为.NET COM创建这些注册表项?
此致 维克多
答案 0 :(得分:0)
如果您希望进程中的所有内容,那么应用程序和COM对象都必须是64位。请参阅Can I load a 32 bit DLL into a 64 bit process on Windows?。