Question

Je suis en train d'utiliser l'API COM VirtualBox (VBoxC.dll) de C #. Je courais

tlbimp VirtualBox.tlb

contre le typelib inclus dans le SDK VirtualBox. Référençant l'ensemble de sortie construit OK, mais lors de l'exécution je reçois un SafeArrayTypeMispatchException ( « tableau Specificed n'a pas du type attendu ») chaque fois que je tente d'accéder à des propriétés qui renvoient des tableaux.

Je peux voir, par exemple, que IVirtualBox.get_Machines() est défini comme

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

Comment puis-je obtenir cet appel à Marshall correctement?

Était-ce utile?

La solution

Voici un lien expliquant votre exception: référence MSDN

Votre spot problème est SafeArraySubType plus probable, est iMachine IDispatch? Il y a plus d'options dans VARENUM pour IUnknown, etc.

Malheureusement, vous devrez modifier votre bibliothèque COM au-delà de ce que tlbimp ... crache

Autres conseils

Il y a quelques options de ligne de commande que vous pouvez essayer avec tlbimp.

Exécuter tlbimp /? pour voir quelques-unes, une peine d'essayer est / sysarray, ce maréchaux différemment des tableaux et peut résoudre votre problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top