2009-07-14 4 views
2

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

tlbimp VirtualBox.tlb 

gegen die Typelib in der VirtualBox SDK enthalten. Das Referenzieren der Ausgabeassembly erstellt OK, aber zur Laufzeit erhalte ich immer dann eine SafeArrayTypeMispatchException ("Spezifisches Array war nicht vom erwarteten Typ"), wenn ich versuche, auf Eigenschaften zuzugreifen, die Arrays zurückgeben. richtig

kann ich zum Beispiel sehe, 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(); 

definiert Wie kann ich diesen Anruf marshall bekommen?

Antwort

2

Hier wird erklärt, ein Link, um Ihre Ausnahme: MSDN reference

Ihr Problem vor Ort ist sehr wahrscheinlich SafeArraySubType ist IMachine ein IDispatch? Es gibt mehr Möglichkeiten in VARENUM für IUnknown usw.

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

+0

IMachine ist kein IDispatch. Ich werde es von C++ ausgehend mit der IDL ausprobieren. –

1

Es gibt ein paar Befehlszeilenoptionen, die Sie mit tlbimp ausprobieren können.

Ausführen tlbimp /? Um ein paar zu sehen, ist es ein Versuch wert/sysarray, dies marshallt Arrays anders und kann Ihr Problem lösen.

+1

Sysarray nicht, leider, ein Update zur Verfügung stellen. –