我必須處理一個COM類,它或多或少是一個更大系統的黑盒子組件。這個類來自COM EXE,並且使用已知的AppID和Typelib ID在系統中註冊。如何註冊一個.NET程序集來代替現有的COM服務器?
爲了調試和記錄的目的,我創建了一個模擬類,它在C#中實現了相同的接口。問題是:如何註冊我的程序集,以便當調用應用程序嘗試實例化接口時,它將實例化我的類?
編輯更多的信息:
我有以下幾點:類型庫的GUID,實現類的GUID,類的進程id GUID。我做了以下,導入類型庫後:
[ComVisible(true)]
[ProgId("The.ProgId.Of.The.Old.Class")]
[Guid("{the guid of the old class}")]
public class MockImplementation : ISomething
{
// ...
}
我嘗試註冊我的課是這樣的:
regasm /codebase myassembly.exe
然而,沒有任何反應。應用程序仍然實例化舊類。我究竟做錯了什麼?
[你有沒有檢查這個(http://blogs.msdn.com/b/jigarme/archive/2008/04/28/how-to-register-net-assembly-for-com-interop.aspx) – 2014-09-03 15:10:02
@SriramSakthivel這似乎並沒有回答這個問題。 – 2014-09-03 15:13:26
只要你有完全相同的接口定義和GUID,你應該能夠通過註冊來完全替代COM服務器,但是如果你的IDL從.NET生成時略有不同,我不會感到驚訝。 – 2014-09-03 15:18:42