.net - .NET COM 对象迁移到 64 位

标签 .net c++ com-interop 32bit-64bit

我们有使用多个 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 添加注册表项),它就找不到接口(interface)(错误 0x80004002)。我检查了注册表,发现在注册 .NET COM DLL 时,它添加了 ClsID 注册表项,但没有添加 Interface 和 TypeLib 注册表项。

问题是,如何为 .NET COM 创建这些注册表项?

问候, 维克多

最佳答案

如果您希望一切都在进程中,那么应用程序和 COM 对象都必须是 64 位的。参见 Can I load a 32 bit DLL into a 64 bit process on Windows? .

关于.net - .NET COM 对象迁移到 64 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2931601/

相关文章:

C++ 设置类值

C# COM 与 C++ COM 返回值

excel - `Range.Formula` 是 COM 对象吗?

c# - Entity Framework 服务器端计算值

c# - 提取分配给文件的正确 16x16 图标?

c# - 窗体窗口关闭时执行一些清理操作

visual-studio - 是否可以在 VS2008 中调试 COM dll?

.net - Windows 窗体控件设计器,添加 'task menus'

c++ - 这方程如何简化为

c++ - std::bad_alloc 在内存位置(可能与创建动态表有关)