我们如何将.NET公共const暴露给COM互操作

时间:2010-05-18 09:17:02

标签: .net vb.net com interop

由于历史原因,我们需要通过COM接口公开.NET中的字符串常量。

我们设法暴露了ENUM,但我们找不到公开字符串const的方法。

我们尝试以下代码:

<ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _
Public Class ComClass1

#Region "COM GUIDs"
    ' These  GUIDs provide the COM identity for this class 
    ' and its COM interfaces. If you change them, existing 
    ' clients will no longer be able to access the class.
    Public Const ClassId As String = "608c6545-977e-4260-a3cf-11545c82906a"
    Public Const InterfaceId As String = "12b8a6c7-e7f6-4022-becd-2efd8b3a756e"
    Public Const EventsId As String = "05a2856f-d877-4673-8ea8-20f5a9f268d5"
#End Region

    ' A creatable COM class must have a Public Sub New() 
    ' with no parameters, otherwise, the class will not be 
    ' registered in the COM registry and cannot be created 
    ' via CreateObject.
    Public Sub New()
        MyBase.New()
    End Sub

    Public Const chaine As String = "TEST"

    Public Sub Method()

    End Sub

End Class

但是当我们查看OLE对象查看器时,我们只看到该方法。

有人有想法吗?

谢谢,

1 个答案:

答案 0 :(得分:2)

如果你遇到常量问题,你总是可以声明一个只读的getter来返回每个常量。

编辑:添加了一些可能与

相关的信息

从以下链接引用:

Visual Basic不提供将此类值作为公共常量添加到类型库的机制,但使用具有只读属性的全局对象可以获得类似的效果。

http://msdn.microsoft.com/en-us/library/aa716309%28VS.60%29.aspx

这个引用是关于VB6的,但它可能是同一个问题,可能至少会给你一些信息。