Domanda

Sto cercando di utilizzare l'API VirtualBox COM (VBoxC.dll) da C #. Ho fatto funzionare

tlbimp VirtualBox.tlb

contro la libreria dei tipi incluso nel SDK VirtualBox. Riferimento al gruppo di uscita costruisce OK ma in fase di esecuzione ottengo un SafeArrayTypeMispatchException ( "matrice specificed non era del tipo previsto") ogni volta che provo per accedere alle proprietà che restituiscono array.

Posso vedere, per esempio, che IVirtualBox.get_Machines() è definito come

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

Come posso ottenere questa chiamata a Marshall correttamente?

È stato utile?

Soluzione

Ecco un link che spiega la vostra eccezione: MSDN di riferimento

Il punto problema è molto probabilmente SafeArraySubType, è IMachine un IDispatch? Ci sono più opzioni in VarEnum per IUnknown, ecc.

Purtroppo si dovrà modificare la libreria COM di là di quanto tlbimp sputa fuori ...

Altri suggerimenti

Ci sono alcune opzioni della riga di comando si può provare con tlbimp.

Esegui tlbimp /? per vedere un paio, uno vale la pena provare è / sysarray, questo marescialli gli array in modo diverso e può risolvere il problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top