问题为COM Interop注册x64程序集

时间:2011-11-18 18:15:07

标签: c# .net registry

我开发了一个示例c#COM-Visible DLL 内置x86并通过32位Regasm注册,它由COM客户端执行良好 COM客户端调用内置x64并通过64位Regasm注册,会丢失以下错误:

Retrieving the COM class factory for component with CLSID {A0F2F58F-7B98-3605-BEC9-84724FF1E824} failed due to the following error: 80040154.

我检查并确保CLCRID确实存在于HKCR \ CLSID下的注册表中。

以下是通过c#模拟COM Access的示例:

var type = Type.GetTypeFromProgID("ProgID.Interop.5683");
var obj = Activator.CreateInstance(type); // <-- blows here

我还通过procmon检查了通过progId成功访问该类型 问题是,Activator在哪里看起来完全正确?以及如何让它“看到”我的x64注册程序集?我需要在某处添加一些内容吗?

我发现许多“解决方案”建议重新构建x86。但是来吧!我不会这样做,只是为了COM而失去所有x64的好处。那是否有“真正的”解决方案?

1 个答案:

答案 0 :(得分:0)

经过一夜的睡眠和一点后见之后,我发现需要从x64应用程序调用Activator,通过查看注册表中的x64位置来查找x64 CLSID。 即,当从x86应用程序调用时,Activaor会在Registry的x86位置查找CLSID和后续密钥,包括代码库。

var type = Type.GetTypeFromProgID("ProgID.Interop.5683");
var obj = Activator.CreateInstance(type);