2009-04-27 65 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对象”部分