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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top