是否有通过 COM 代理注册 32 位 COM 类以供 64 位使用的工具

Posted

技术标签:

【中文标题】是否有通过 COM 代理注册 32 位 COM 类以供 64 位使用的工具【英文标题】:Is there a tool for registering 32 bit COM classes for use by 64bit through the COM surrogate 【发布时间】:2020-06-05 23:36:33 【问题描述】:

我们有一些 C# 程序集可以使用 RegAsm 注册并使用 32 位 Excel 从 VBA 访问

如果我们使用 64 位 Excel,那么我们需要添加注册表项,例如

[HKEY_CLASSES_ROOT\AppID\F103997A-4B60-44BB-8935-AC85704A7960]
"DllSurrogate"=""

[HKEY_CLASSES_ROOT\CLSID\F103997A-4B60-44BB-8935-AC85704A7960]
AppID="F103997A-4B60-44BB-8935-AC85704A7960"

[HKEY_CLASSES_ROOT\CLSID\F103997A-4B60-44BB-8935-AC85704A7960]
AppID="F103997A-4B60-44BB-8935-AC85704A7960"

这似乎足以让它工作,但我们想知道是否有一个工具可以生成注册表项,并以与 RegAsm 注册/注销相同的方式删除它们

【问题讨论】:

您可以使用 COM+ 组件服务提供的代理,而不是这样的代理:docs.microsoft.com/en-us/windows/win32/cossdk/… 它是完全可编程的,还提供了一系列附加服务(池、回收等)跨度> 如果您为 MSIL 编译它们(而不是 x86 或 x64),那么您可以使用 regasm 为 32 位和 64 位注册相同的程序集。诀窍是您使用 32 位 regasm 注册 32 位,并使用 64 位 regasm 注册 64 位。 64 位 regasm 通常位于 c:\windows\Microsoft.Net\Framework64\v4.0.30319 或您所在的任何位置。 不幸的是 32 位代码仍然依赖于其他 32 位元素,我们正在努力开发任何 CPU,但还没有...... 【参考方案1】:

没有工具可以生成 COM 代理项以使 64 位 Excel 能够与 32 位 COM 通信。

我编写了一个简单的工具来生成 .reg 文件,安装程序使用它。

当我们的class ids/prog Ids改变时,会生成一个新的.reg文件

【讨论】:

以上是关于是否有通过 COM 代理注册 32 位 COM 类以供 64 位使用的工具的主要内容,如果未能解决你的问题,请参考以下文章

从系统(SysWOW64)目录外部注册 32 位 COM 时出现问题

从 32 位 Python 更改 64 位注册表

Windows 64 位注册表与32 位注册表

带有 32 位 VB6 COM 对象的 64 位 C#

无法在 32 位机器上注册使用 VS2012/VC++ 构建的 COM DLL

如何使用 Visual Studio 2022 注册 32 位 COM 互操作