VirtualBox COM API de C #
-
13-09-2019 - |
Pergunta
Eu estou tentando usar a API VirtualBox COM (VBoxC.dll) de C #. Corri
tlbimp VirtualBox.tlb
contra o typelib incluído no VirtualBox SDK. Referenciando a saída de montagem constrói OK, mas em tempo de execução recebo uma SafeArrayTypeMispatchException
( "array Specificed não era do tipo esperado") sempre que tento acessar propriedades que matrizes de retorno.
Eu posso ver, por exemplo, que IVirtualBox.get_Machines()
é definido como
[return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_DISPATCH)]
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x60020009)]
public virtual extern IMachine[] get_Machines();
Como posso obter esta chamada para marshall corretamente?
Solução
Aqui está um link explicando sua exceção: referência MSDN
Seu ponto problema é mais provável SafeArraySubType, é IMachine um IDispatch? Há mais opções em VARENUM para IUnknown, etc.
Infelizmente você terá que editar sua biblioteca COM além do que tlbimp cospe ...
Outras dicas
Existem algumas opções de linha de comando que você pode tentar com tlbimp.
Executar tlbimp /? para ver alguns, um vale a pena tentar é / sysarray, este marechais matrizes de forma diferente e pode resolver o seu problema.