2009-04-27 48 views
2

我已經運行了一些明確創建三個GUID常量並在類的ComClass屬性中使用它們的VB.NET代碼。我在過去編寫了COM感知類,只需在項目選項中選中「Make COM-Visible」和「Register for COM interop」選項即可。這個明確的代碼是不是很簡單,或者它是否超出了這兩個選項的範圍?這裏有一個片段:VB.NET會自動生成ComClass屬性和GUID嗎?

<ComClass(MenuHandler.ClassId, MenuHandler.InterfaceId, MenuHandler.EventsId)> _ 
Public Class MenuHandler 
    Public Const ClassId As String = "A2204623-A902-44d4-B524-FDFFCD176E53" 
    Public Const InterfaceId As String = "3449CA8B-16DF-4a61-8BAB-DFF27AE70F5E" 
    Public Const EventsId As String = "06C156DD-0ABA-437e-9EE0-C1CE2CA34033" 
End Class 

回答

2

通過明確地把屬性在要暴露就可以防止類似的事情輔助類,內部工具,或內部類,不應該被暴露露出類和枚舉。這是微軟推薦的方式......當他們推薦某些東西時,通常意味着如果你不這樣做,你的程序將來可能會崩潰。 :)

檢查「使COM可見」和「註冊COM互操作」是製作COM可見對象的簡單方法,但不推薦使用。這會增加每個可見類的開銷 - 即使是你可能不想要的。

2

ComClass屬性特定於Visual Basic,旨在簡化.Net代碼中COM對象的創建。當編譯器看到這個屬性時,它會做一些繁瑣的工作,必須在C#中手動完成。總之,它是用於創建COM對象的Visual Basic代碼的快捷方式。

這裏是什麼這提供了在C#中做同樣的一個偉大的文章:

2

VB.NET會自動生成ComClass屬性和GUID?

是的,如果您使用VB.NET COMClass模板創建類,則會自動生成COMClassAttribute和這些GUID。

Detail in MSDN 「通過使用COM類模板創建COM對象」部分