已知可以創建.NET程序集/類COM Visible,以便程序集中的類可以通過COM感知的客戶端實例化爲COM對象。在.NET類中實現COM接口時是否有任何「疑難雜症」?
是否有任何「疑難雜症」需要注意?
已知可以創建.NET程序集/類COM Visible,以便程序集中的類可以通過COM感知的客戶端實例化爲COM對象。在.NET類中實現COM接口時是否有任何「疑難雜症」?
是否有任何「疑難雜症」需要注意?
爲什麼是的,是的。
1)需要這種Interop的一個特殊情況是當你的類需要實現一個已經存在的COM接口時。例如,SharePoint提供了一些插件體系結構,其中插件被註冊爲一個實現一些自定義接口的COM類。
如果您沒有該接口的Primary Interop Assembly,那麼您應該需要添加對TLB或包含TLB的DLL的引用。添加引用時,可以通過選擇「瀏覽」在Visual Studio中添加引用。如果你沒有TLB,你應該有一個IDL,你可以使用midl.exe
編譯成TLB。某些文檔建議等效於在TLB上運行tlbimp.exe
,併爲生成的程序集添加引用。
但是......
byte*
可能會翻譯爲ref byte
)。RemoteReadAt
和RemoteWriteAt
方法,而不是ReadAt
和WriteAt
)。所以,當你可以使用來自TLB自動生成爲起點裝配 - 你必須解決上述所有的,無論是通過修改組件或只是複製生成的代碼到源文件,然後進行必要的更改。
2)根據documentation中的建議,添加ClassInterfaceAttribute
和ClassInterfaceType.None
作爲類型。
3)建立了Any CPU
架構的組件,然後在任何機器上,你想註冊 -
C:\Windows\Microsoft .NET\Framework\<version>\regasm.exe
。C:\Windows\Microsoft .NET\Framework64\<version>\regasm.exe
進行註冊。4)剛剛運行regasm.exe
不添加。NET組件連接到GAC,因此如果您未自行將組件安裝到GAC中,請務必使用參數regasm.exe
。
5)即使Visual Studio以管理員權限運行,如果在構建選項中選中「註冊COM互操作」複選框,程序集的註冊通常也會失敗。最好清除複選框,而是將regasm.exe
作爲後期製作事件添加。
,我碰到的一對夫婦:
還有很多。你不能在SE網站詢問「問題清單」。 –