Wie setzen ein enum definiert, die in einer COM-Bibliothek via interop als Rückgabe-Typ einer c# - Funktion

Hoffentlich die Frage ist klar, aber pad it out für Klarheit:

Ich habe eine VB6-dll, definiert ein enum, die ich bin Referenzierung in meinem C# - dll. Die C# - dll definiert einen CCW in der richtigen Art und Weise mit einem idispatch-Schnittstelle, in der Sie deklariert eine Funktion, der Rückgabetyp ist die Enumeration.

Beim laufen regasm ich bekomme eine Warnung, dass die enum ist nicht COM-sichtbar und so die Funktion nicht exportiert. Da es definiert, die in meinem VB6-Bibliothek, die ich hätte gedacht, es ist schon COM-sichtbar, weil es definiert eine COM-dll.

Ich klar, dass ich aufhören kann über Unordnung und verwenden Sie ein int übergeben werden, die enum-und nur noch casting-entweder Ende, aber es ist die richtige frustrierend und ich würde gerne wissen, ob eine Möglichkeit besteht.

Wie gewünscht ist hier einige Beispiel-code:

VB6-dll definiert ein enum

Public Enum myEnum
    first = 0
    second = 1
End Enum

Diese Daten werden importiert über interop in den C# - und wenn Sie die Metadaten anzeigen, die es sieht wie folgt aus

[Guid("EnumGUID")]
public enum myEnum
{
    first = 0,
    second = 1        
}

Dann die CCW Schnittstelle definiert ist

[ComVisible(true)]
[Guid("InterfaceGuid")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IMyCCWInterface
{
    [DispId(1)]
    myEnum myFunction();
}

Regasm beschwert, dass myEnum ist nicht com-sichtbar. Ich muss Zustimmen, da die Metadaten-Ansicht nicht über die com-sichtbar-Attribut. Seltsam, wenn ich mit anderen Typen definiert in der VB-dll für die Argumente der Funktion bekomme ich keine Beschwerden, nur scheint die enum-und ich vermute, es ist weil ich bin tatsächlich der interopped Umsetzung der VB6-enum und nicht die tatsächlichen enum.

So, ich glaube, ich verstehe das Problem, was ich gerne wissen würde ist, ob es einen Weg, um diese Arbeit mit enums, die nicht die hacken alle zwischen-oder auto-generierten code.

  • Ist VB6 dll ist eine COM-dll? Bitte zeig uns etwas code, um das problem zu verstehen.
InformationsquelleAutor Akuma | 2012-07-25
Schreibe einen Kommentar