我开发了一个示例c#COM-Visible DLL。
内置x86并通过32位Regasm注册,它可以通过COM Client很好地执行。
内置64位,并通过64位Regasm注册,COM客户端调用生成以下错误:问题为COM Interop注册x64程序集
Retrieving the COM class factory for component with CLSID {A0F2F58F-7B98-3605-BEC9-84724FF1E824} failed due to the following error: 80040154.
我检查并确保该CLSID是下HKCR \ CLSID注册表确实存在。
下面是模拟通过C#中的COM访问的例子:
var type = Type.GetTypeFromProgID("ProgID.Interop.5683");
var obj = Activator.CreateInstance(type); // <-- blows here
我也通过将procmon检查,有通过PROGID 问题是,哪里是激活看完全是一个成功的访问类型?以及如何使它“看到”我的x64注册程序集?有什么我需要添加的地方?
我发现许多“解决方案”建议x86重新构建。但是Come'on!我不打算这样做,只是为了COM而失去所有x64的好处。有没有“真正的”解决方案?
在什么情况下会抛出80040154错误? –
@Ramhound当CLSID不在或不在正确的位置时。所以我很困惑。 –
您不会为特定体系结构构建受管DLL,只有EXE项目的设置很重要。经典错误是使用Regasm.exe的错误位或忘记/ codebase选项。使用SysInternals的ProcMon实用程序进行故障排除。 –