2009-07-14 12 views
2

J'essaie d'utiliser l'API COM VirtualBox (VBoxC.dll) de C#. J'ai couruAPI COM VirtualBox à partir de C#

tlbimp VirtualBox.tlb 

contre le typelib inclus dans le VirtualBox SDK. Le référencement de l'assembly de sortie se produit correctement, mais lors de l'exécution, j'obtiens un SafeArrayTypeMispatchException ("Le tableau spécifié n'était pas du type attendu") chaque fois que j'essaie d'accéder à des propriétés renvoyant 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?

Répondre

2

Voici un lien expliquant votre exception: MSDN reference

Votre spot problème est très probablement SafeArraySubType, 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
+0

IMachine n'est pas un IDispatch. Je vais essayer le C++ en commençant par l'IDL. –

1

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

Exécutez tlbimp /? Pour en voir quelques-uns, il vaut la peine d'essayer est/sysarray, ce marshals tableaux différemment et peut résoudre votre problème.

+1

Sysarray n'a pas, malheureusement, fournir un correctif. –

Questions connexes