Maréchal C++ int tableau de C#
Je voudrais maréchal un tableau d'entiers à partir de C++ C#. J'ai une C++ dll qui contient:
DLL_EXPORT int* fnwrapper_intarr()
{
int* test = new int[3];
test[0] = 1;
test[1] = 2;
test[2] = 3;
return test;
}
avec déclaration dans l'en-tête extern "C" DLL_EXPORT int* fnwrapper_intarr();
Je suis alors à l'aide de pinvoke de maréchal en C#:
[DllImport("wrapper_demo_d.dll")]
[return: MarshalAs(UnmanagedType.SafeArray)]
public static extern int[] fnwrapper_intarr();
Et j'utilise la fonction comme ceci:
int[] test = fnwrapper_intarr();
Cependant, lors de l'exécution j'obtiens l'erreur suivante: SafeArray cannot be marshaled to this array type because it has either nonzero lower bounds or more than one dimension.
Ce type de tableau de dois-je utiliser? Ou est-il un bettery façon de du rassemblement des matrices ou des vecteurs d'entiers?
Si vous êtes l'auteur de fnwrapper_intarr, il n'y a rien contre le retour d'un safearray (ou mieux comme paramètre)?
OriginalL'auteur Seth | 2010-09-23
Vous devez vous connecter pour publier un commentaire.
Vous devez également écrire fonction de Libération de non géré Dll, ce qui supprime pointeur créé par fnwrapper_intarr. Cette fonction doit accepter IntPtr comme paramètre.
Marshal.Copy
pasMarshal::Copy
.Et que devez-vous faire si vous ne connaissez pas la taille de la matrice de C#?
OriginalL'auteur Alex F