2010-06-23 6 views

Répondre

2

Par ref & ne va pas arriver aussi loin que je travaille sur.

MSDN has the answers you seek

et ne pas oublier d'exporter votre fonction de C++ comme extern "C"

Selon MSDN: Default marshaling for arrays sur le côté C# Je pense que vous voulez quelque chose comme ce qui suit

public static extern void func1( 
    out int count, 
    [MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)] int[] values); 

SizeParamIndex dit à .net quel argument contiendra la taille du tableau à marshaler.

+0

merci, Greg. Je leur ai demandé de changer int & int *. Je suis encore confus par le paramètre int * PValue. Ici, le côté C++ signifie un tableau de int. si j'utilise "[OutAttribute] int pValue" en C#, comment puis-je utiliser array? – 5YrsLaterDBA

+0

Et aussi mentionné dans cet article: - Il y a des cas où [OutAttribute] sera ignoré. Par exemple, [OutAttribute] int n'a aucun sens, donc [OutAttribute] est simplement ignoré par le CLR. La même chose est vraie pour la chaîne [OutAttribute] car la chaîne est immuable .--- Je ne peux pas utiliser [OutAttribute] avec int? – 5YrsLaterDBA

+0

OK Je pense que je peux utiliser ceci: [MarshalAs (UnmanagedType.LPArray)] Int32 [] pour ces deux paramètres. Ai-je toujours besoin de [OutAttribute]? Ces deux paramètres sont vraiment "out" type. – 5YrsLaterDBA