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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top