我開發了一個示例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實用程序進行故障排除。 –