2010-05-18 8 views
3

Pour des raisons historiques, nous devons exposer les constantes de chaîne dans .NET via l'interface COM.Comment pouvons-nous exposer un const public .NET à COM interop

Nous avons réussi à exposer ENUM mais nous ne pouvons pas trouver un moyen d'exposer la chaîne const.

Nous essayons le code suivant:

<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 

Mais quand on regarde le spectateur de l'objet OLE, nous ne voyons que la méthode.

Quelqu'un a une idée?

Merci,

Répondre

2

Si vous avez un problème avec juste les constantes, vous pouvez toujours juste Déclarez une lecture seule getter pour retourner chacune des constantes.

Edit: Ajout d'informations qui pourraient être pertinentes ci-dessous

Citation du lien ci-dessous:

Visual Basic ne fournit pas de mécanisme permettant d'ajouter ces valeurs à votre bibliothèque de types comme des constantes publiques, mais vous pouvez obtenir un effet similaire en utilisant un objet global avec des propriétés en lecture seule.

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

Cette citation est sur VB6 bien, mais il pourrait être la même question et pourrait vous donner plus d'informations là-bas au moins.

+0

Nous avons pensé à cela aussi, le seul problème est que nous voulons "montrer" la valeur de la constante de l'autre côté. – JulienC

+0

Vous ne savez pas exactement ce que vous voulez dire avec le mot "show" car si vous renvoyez la valeur dans un getter, l'autre côté pourrait le voir? Ajout d'un lien sur lequel j'ai trébuché qui pourrait être utile même si c'est pour VB6. –

+0

+1 Je pense que cela peut être une limitation COM - pas de constantes de chaînes publiques. Quelqu'un sait-il? – MarkJ