Frage

Ich habe eine verwaltete Assembly, die über COM-Interop aufgerufen wird. Wie ein VBScript-Client, ein Perl-Client, und so weiter.

Die Klassen sind mit

[ClassInterface(ClassInterfaceType.AutoDual)]
[GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000E")]
[ComVisible(true)]

Dann natürlich tue ich die regasm Sache, und alle Methoden gut funktionieren.

Es gibt aber auch Enum-Typen in der Montage. Ich möchte symbolische Namen COM-Anwendungen verwenden, für die ENUM-Werte.

Wie aussetzen ich die Aufzählungen über COM-Interop? Muss ich nur diese Attribute hinzufügen?

[GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000E")]
[ComVisible(true)]

Und dann, wie verweisen ich diese symbolischen Namen in VBScript? Ich sehe nicht die Aufzählungstypen in OleView. (Sollte ich?) Ich alle anderen Arten in OleView sehen.

War es hilfreich?

Lösung

VBScript und andere spät gebundene Kunden IDispatch verwenden Methoden auf Objekte zu nennen. Als solche sind diese Sprachen nicht Zugang haben Informationen in der typelib zu geben -. Sie nur ein Objekt aus einer GUID erstellen, einen IDispatch zurück Zeiger erhalten, und namentlich das Aufrufen von Methoden starten

Ich bin der COM-Interop Teils der Frage nicht sicher, aber selbst wenn die Aufzählungen zeigen tun in OleView, würden Sie nicht in der Lage sein, sie direkt zu nutzen.

Wenn Sie jedoch die Aufzählungen in der typelib veröffentlichen können, schrieb ich ein Tool vor Äonen, die eine Skriptdatei (vbs oder js) erzeugen können alle Aufzählungen von einem typelib als Konstanten enthalten.

Sehen Sie hier: http://www.kontrollbehov.com/tools/tlb2const/

Andere Tipps

Meine (bisher nur) .NET-Assembly, die ich COM-sichtbar gemacht hatte auch einen Aufzählungstyp, der gerade fein in OleView auftauchte. Ich hatte die ganze Bibliothek seine COM-sichtbar, so

[ComVisible(true)]

war nicht erforderlich. Ist Ihre Enumerationstyp Öffentlichkeit?

Eine Sache, die passiert ist, war, dass die verschiedenen Aufzählungen wurden ‚Präfix‘ mit ‚Aufzählungstyp Namen‘ _:

public enum DataType
{
    INT32,
    FLOAT64,
    INT8
}

verwandelte sich in:

typedef [...]
enum {
    DataType_INT32 = 0,
    DataType_FLOAT64 = 1,
    DataType_INT8 = 2
} DataType;

in der Typbibliothek.

Ich weiß, dass dies ein sehr alter Thread ist, aber ich werde meinen 2 Cent für zukünftige Entdecker hinzuzufügen. Wenn ich eine Enum in C # definiere ich dekorieren es mit [Guid (...), ComVisible (true)] nicht GuidAttribute.
Zum Beispiel:

[Guid("28637488-C6B3-44b6-8621-867441284B51"), ComVisible(true)]
public enum myEnum
{
    first,
    second,
    third,
    fourth
}

Dann wäre die Aufzählung in VB6 als myEnum_first, myEnum_second und so weiter zur Verfügung.

Sie können die Zuordnung von Schlüsselwerten in dieser Liste enthalten als gut, so ersten = 1 in der Aufzählung gültig wären.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top