VirtualBox COM API von C #
-
13-09-2019 - |
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
[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?
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.