Как мы можем предоставить общедоступный констант .NET для COM-взаимодействия - PullRequest
3 голосов
/ 18 мая 2010

По историческим причинам нам необходимо предоставить строковые константы в .NET через интерфейс COM.

Нам удалось представить 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 Ответ

2 голосов
/ 18 мая 2010

Если у вас есть проблемы только с константами, вы всегда можете просто объявить метод чтения только для чтения, чтобы вернуть каждую из констант.

Редактировать: добавлена ​​информация, которая может иметь отношение к ниже

Цитата по ссылке ниже:

Visual Basic не предоставляет механизм для добавления таких значений в вашу библиотеку типов как публичные константы, но вы можете получить аналогичный эффект, используя глобальный объект со свойствами только для чтения.

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

Эта цитата относится к VB6, но это может быть та же проблема, и она может дать вам как минимум дополнительную информацию.

...