VirtualBox API COM de C #
-
13-09-2019 - |
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?
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.