2009-05-25 7 views
1

J'ai un programme VB6 qui appelle une méthode COM, en passant 2 tableaux en tant que paramètres et en attendant 2 tableaux à remplir en réponse.Marshaling tableaux de VB.NET à COM objet

Le code est le suivant: ItemID et ItemClientHandles sont les paramètres du tableau d'entrée et MyItemServerHandles et Errors sont renseignés par l'objet COM.

Dim ItemIDs(2) As String 
Dim ItemClientHandles(2) As Long 
Dim Errors() As Long    ' Array for returned Item related errors 
Dim MyItemServerHandles() As Long ' Server Handles for Items 

ItemIDs(1) = "2,VW1000,word" 
ItemIDs(2) = "2,VW1002,word" 

ItemClientHandles(1) = 1 
ItemClientHandles(2) = 2 

Call MyItems.AddItems(2, ItemIDs, ItemClientHandles, MyItemServerHandles, Errors) 

Maintenant, je voudrais appeler la même méthode de VB.NET, et a essayé quelque chose comme ceci pour définir les tableaux:

<MarshalAs(UnmanagedType.LPArray, ArraySubType:=UnmanagedType.I4, SizeConst:=2)> Private MyItemServerHandles(2) As Int32 ' Server Handles for Items 
<MarshalAs(UnmanagedType.LPArray, ArraySubType:=UnmanagedType.LPWStr, SizeConst:=2)> Private ItemIDs(2) As String 
<MarshalAs(UnmanagedType.LPArray, ArraySubType:=UnmanagedType.I4, SizeConst:=2)> Private ItemClientHandles(2) As Int32 
<MarshalAs(UnmanagedType.LPArray, ArraySubType:=UnmanagedType.I4, SizeConst:=2)> Dim Errors(2) As Int32 ' Array for returned Item related errors 

mais ne peut le faire fonctionner, parce que je reçois une erreur (que j'essaie de traduire de l'italien):

Impossible de lancer des objets à partir du type 'System.Int32 [*]' taper 'System.Int32 []'

Quelle est la manière correcte de marshaler les baies de code managé VB.NET en code COM non managé?

Merci

Répondre

1

Résolu.

Les tableaux de sortie doivent être simplement déclarés comme

Private MyItemServerHandles As System.Array 
Private Errors As System.Array 

et ils seront marshalés correctement sous forme de tableaux Int32 lors du retour de l'appel.

Questions connexes