VirtualBox COM API de C #
-
13-09-2019 - |
Pregunta
Estoy tratando de utilizar la API de VirtualBox COM (VBoxC.dll) desde C #. Corrí
tlbimp VirtualBox.tlb
en contra de la biblioteca de tipos incluidos en el SDK VirtualBox. Hacer referencia a la asamblea de salida construye bien, pero en tiempo de ejecución recibo una SafeArrayTypeMispatchException
( "array Specificed no era del tipo esperado") cada vez que intento acceder a las propiedades que devuelven matrices.
puedo ver, por ejemplo, que IVirtualBox.get_Machines()
se define como
[return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_DISPATCH)]
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x60020009)]
public virtual extern IMachine[] get_Machines();
¿Cómo puedo obtener esta llamada a Marshall correctamente?
Solución
Aquí hay un enlace que explica su excepción: MSDN referencia
Su punto problema es más probable SafeArraySubType, es IMachine IDispatch? Hay más opciones en VARENUM para IUnknown, etc.
Por desgracia, tendrá que editar su biblioteca COM más allá de lo tlbimp escupe ...
Otros consejos
Hay algunas opciones de línea de comandos se puede tratar con tlbimp.
Ejecutar tlbimp /? para ver unos pocos, uno vale la pena probar es / sysarray, este calcula las matrices de manera diferente y puede resolver su problema.