2010-09-29 6 views
2

Je suis nouveau en programmation C# et essaye d'appeler des fonctions de retour à la ligne en C++.Comment marshall (idéalement dans SWIG) une chaîne C# [] à une chaîne C++ *?

En C++ j'ai une fonction du prototype suivant

string* swap(string* ptr1, string*ptr2){ 
    //swap the array of string 
    return ptr2; 
} 

Comment puis-je conclurai cette fonction en C# (idéalement à l'aide SWIG, mais pas nécessaire)?

+0

Comment se termine ce tableau? Tu ne peux pas passer la taille du tableau? –

+0

Quel est le type de chaîne? Est-ce std :: string ou un autre tableau struct/class ou char? Pouvez-vous écrire plus spécifiquement? – Liton

+0

ils sont std :: string – leon

Répondre

1

J'avais la même question pour Java.

Pour Java, je n'ai rien trouvé pré-emballé et trivial à utiliser. Je devais définir mes propres typemaps.

Si vous n'obtenez pas de meilleures réponses pour C#, vous pouvez commencer avec le code SWIG/C++ décrit au SWIG: How to wrap std::string& (std::string passed by reference).

Vous devez remplacer les références aux types Java, aux méthodes JNI (celles qui incluent une référence à «jenv») et à «JavaThrowException».

Ces fichiers de SWIG pourraient également fournir quelques exemples de code pertinent pour C#:

  • rasade/Lib/csharp/std_string.i
  • rasade/Lib/csharp/typemaps.i
+0

La chaîne est relativement simple (?) Mais je ne sais pas comment la chaîne [] dans C# est structure dans la mémoire. Ils sont juste tampon continu avec \ 0 terminateurs? – leon

+0

Puisque les chaînes C# sont des types de référence, je suppose que le tableau est un tableau de références à des objets chaîne non contigus. Je ne connais pas le moyen le plus simple de convertir des chaînes C# et C++ en C++. –

Questions connexes