Frage

Ich versuche, die VirtualBox COM API (VBoxC.dll) von C # zu verwenden. Ich lief

tlbimp VirtualBox.tlb

gegen die typelib in dem VirtualBox-SDK enthalten. die Ausgabebaugruppe Referenzierung baut OK aber zur Laufzeit erhalte ich ein SafeArrayTypeMispatchException ( „specificed Array nicht den erwarteten Typ war“), wenn ich versuche Eigenschaften zuzugreifen, die Arrays zurück.

Ich kann sehen, zum Beispiel, dass IVirtualBox.get_Machines() als

definiert
[return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_DISPATCH)]
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x60020009)]
public virtual extern IMachine[] get_Machines();

Wie kann ich diesen Anruf marshall bekommen richtig?

War es hilfreich?

Lösung

Hier ist ein Link Ihre Ausnahme erklärt: MSDN Referenz

Ihr Problem vor Ort wird höchstwahrscheinlich SafeArraySubType ist IMachine ein IDispatch? Es gibt mehr Möglichkeiten in VARENUM für IUnknown, etc.

Leider müssen Sie Ihre COM-Bibliothek bearbeiten jenseits dessen, was tlbimp ausspuckt ...

Andere Tipps

Es gibt ein paar Kommandozeilenoptionen, die Sie mit tlbimp versuchen können.

Ausführen tlbimp /? sehen zu wenige, man einen Versuch wert ist / sysarray, diese Arrays unterschiedlich Marschälle und kann Ihr Problem lösen.

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