我寫了一個簡單的.NET項目(類庫),它是COM可見的。它適用於VB6!使用ClassInterfaceType.AutoDual真的是一個壞主意,即使使用VB6?
代碼看起來像以下:
[ComVisible(true)]
[ClassInterface(ClassInterfaceType::AutoDual)]
public ref class MyObject
{
// Some methods and values
}
的組件正確簽名(如果它不是在GAC不要求),註冊(regasm MyProject.dll /tlb /codebase
)。
然後,我的VB6項目中引用TLB文件,一切都OK!我可以訪問我的課程和他們內部的公共方法。
在互聯網上,很多人都說使用ClassInterfaceType::AutoDual
不是一個好主意,因爲版本的潛在問題可能會破壞使用程序集的應用程序。
但是,就我而言,這是否真的有問題?此程序集僅用於VB6項目(在早期綁定中)。
在每一個新版本中,我都會返回這些步驟(簽名,註冊等)。這個解決方案可以是任何版本問題嗎?
無論如何,我可以寫一些[GUID("...")]
屬性嗎?
GUID由Visual Studio自動生成,所以類在每次編譯時都不是相同的GUID。這樣對嗎?
感謝您的回覆!澄清,在項目中,目標是:1)在VB6中使用Intellisense 2)使用這樣的對象:'Dim myobj As New MyObject'。那麼我的解決方案很好,不是嗎? –
我已經在我的回答中介紹過,自動完成和IntelliSense是一樣的,你不想使用GetObject。顯然你堅持使用AutoDual。 –
非常感謝!簡而言之,如果我正確卸載並重新安裝程序集(使用'regasm'),那麼即使使用自動生成的GUID和AutoDual,它們也不會出現版本控制問題。 DispID如何? –