Conversion de char* en C#

gwenn035 Messages postés 9 Date d'inscription jeudi 21 novembre 2002 Statut Membre Dernière intervention 1 juillet 2004 - 25 juin 2004 à 13:47
gwenn035 Messages postés 9 Date d'inscription jeudi 21 novembre 2002 Statut Membre Dernière intervention 1 juillet 2004 - 1 juil. 2004 à 09:48
Bonjour à tous, je debute en C# et en Cpp (je suis plutot Java pour le moment) et j'ai fais une dll en vc++ qui contient une procedure qui a 4 paramètres de type char*.

Maintenant je veux pouvoir acceder à cette methode depuis mon programme en C# mais je sais pas si je dois utiliser un char[], String ou autre....

------------------------------------------------------------
prototype dans la dll cpp
------------------------------------------------------------

void __stdcall Parse(char*,char*,char*,char*);

------------------------------------------------------------
chargement de la dll et utilisation dans c#
------------------------------------------------------------

[DllImport("parser.dll", CharSet=CharSet.Auto)]
public static extern void Parse(ref String FileName, ref String FilePath, ref String Title, ref String Author);

...

private void btnParse_Click(object sender, System.EventArgs e)
{
String FileName = txtFileName.Text;
String FilePath = txtFilePath.Text;
String Title = "";
String Author = "";

Parse( ref FileName, ref FilePath, ref Title, ref Author );

txtTitle.Text = Title;
txtAuthor.Text = Author;
}

PS : je viens de taper le code de tête sans avoir compilé car j'ai pas mon source avec moi mais en gros c'est ça. txtFileName, txtFilePath, txtTitle, txtAuthor sont 4 textbox de mon form et btnParse un bouton qui lance le traitement.

Pour avoir une idée du fonctionnement la methode de la dll prend le FileName et le FilePath (peut être NULL car pas obligatoirement utilisé) et en deduit le nom de l'auteur et le titre. Vous aurez deviner que c'est pour de la musique... :-)

merci de votre aide.
Gwenn

6 réponses

cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
25 juin 2004 à 15:03
dans ton cas je pense que tu dois utiliser :
public static extern void Parse(string FileName, string FilePath, string Title, string Author);

les ref ne sont pas necessaires comme char* designe une chaine de caracteres dans ton cas

Cocoricoooooooo !!!!
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 10
25 juin 2004 à 15:24
ouais le coq a raison !!! juste une question comme ca pour moi qui debute egalement en C#... les pointeurs n'existe pas, les tableau existe eu en C# non? si oui, on peut remplancer un char *var par un char var[xx], est ce exacte?
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
25 juin 2004 à 15:36
possible
je n'ai pas encore eu l'occasion (ni l'idée) d'essayer
a tester donc

Cocoricoooooooo !!!!
0
gwenn035 Messages postés 9 Date d'inscription jeudi 21 novembre 2002 Statut Membre Dernière intervention 1 juillet 2004
28 juin 2004 à 13:59
Bon et bien j'ai toujours pas réussi à utiliser ma dll depuis c#.
Ce qui est bizarre c'est que le programme se termine sans aucun message d'erreur. Donc pas moyen de savoir d'ou ça vient.

Source de la dll : http://www.virtualdj.com/support/developers/parser.cpp

Si qu'un arrive à faire fonctionner ce serait cool de me dire comment.

Merci
Gwenn
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
28 juin 2004 à 14:20
ah ba fallait le dire que les 2 derniers etait en sortie
string est un type "immuable" : une operation sur des string retourne toujours une nouvelle instance (chaine[0]='a' est possible en C++, pas en C# par exemple)
quand on doit recuperer qqch en sortie, on marshall en StringBuilder, pas string :

[DllImport("parser.dll", EntryPoint="Parse")]
private static extern void ParseFileName(string FileName, 
string FilePath, 
StringBuilder Title, 
StringBuilder Author);

private void button1_Click(object sender, System.EventArgs e)
{
StringBuilder titre = new StringBuilder(512);
StringBuilder auteur = new StringBuilder(512);
ParseFileName("Jean Claude - Vous casse les oreilles.mp3", string.Empty, titre, auteur);
MessageBox.Show("Auteur : "
+ auteur.ToString()
+ "\r\nTitre : "
+ titre.ToString());
}


Cocoricoooooooo !!!!
0
gwenn035 Messages postés 9 Date d'inscription jeudi 21 novembre 2002 Statut Membre Dernière intervention 1 juillet 2004
1 juil. 2004 à 09:48
Merci Coq je vais tester ça ce soir :p

Au moins j'aurais appris quelque chose avec ça.

Gwenn
0