IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++/CLI Discussion :

[C# & C++] Lire un ArrayList par C++


Sujet :

C++/CLI

  1. #1
    Membre confirm� Avatar de anas.eh
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    181
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 181
    Par d�faut [C# & C++] Lire un ArrayList par C++
    Salut,

    J'ai s�rialis� un ArrayList par C#, et je veux le d�serialiser dans un programme C++, est-ce que quelqu'un saura m'aider ? C++ pourra r�cup�rer un ArrayList ?

    Merci

  2. #2
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    la d�s�rialisation en C++/CLI foncitonne de la meme facon qu'en c#, c'est juste une question de syntaxe
    tu peux t'inspirer de la faq c++/cli http://dotnet.developpez.com/faq/cpp...#serialization

  3. #3
    Membre confirm� Avatar de anas.eh
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    181
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 181
    Par d�faut
    L� je veux une s�rialisation binaire, parce que je pense qu'il n'y a pas d'objet de type ArrayList dans C++, � noter que mon outil que j'ai r�alis� c'�tait en C#.
    En fait, cet outil renvoie le projet sous format d'un tableau en C# (ArrayList) et les utilisateurs travaillent en C++ danc il veulent r�cup�rer leur travail (c�d l'ArrayList). Moi j'ai propos� le format XML pcq �a sera facil de le lire avec C++, mais l'encadrant m'a demand� le format binaire, l'id�e que j'ai maintenant c'est de faire une s�rialisation binaire manuelle, mais �a demande du travail .

    Qu'est-ce que vous en pensez ?

  4. #4
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    le C++/CLI sait travailler avec les arraylist

    maintenant, si tu veux faire une d�s�rialisation native, il va surement falloir impl�menter ton propre traducteur.

  5. #5
    Membre confirm� Avatar de anas.eh
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    181
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 181
    Par d�faut
    le C++/CLI sait travailler avec les arraylist
    => Comment d�serialiser un ArrayList de C# avec C++ ?

    maintenant, si tu veux faire une d�s�rialisation native, il va surement falloir impl�menter ton propre traducteur.
    C'est-�-dire impl�menter mon propre serializer, c'est �a ?

    D�sol� mais je comprend pas bien le terme natif .

  6. #6
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    ce qu'on entend par natif, c'est du C++ classique, qui ne sait pas utiliser le framework .net et donc par extension, qui n'a pas acc�s � la class ArrayList

    le C++/CLI, c'est justement du C++ qui sait acceder au framework.Net. Si c'est de ce c++ dont tu parles, c'est TRES simple. Sinon, c'est plus dur

  7. #7
    Membre confirm� Avatar de anas.eh
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    181
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 181
    Par d�faut
    Donc d'apr�s ce que j'ai compris, puisque le C++ .NET comprendra l'ArrayList(C#) la solution est de cr�er un programme C++ .NET qui transformera mon ArrayList(C#) en ArrayList(C++ natif), c'est �a ?

  8. #8
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    ce que tu peux faire, c'est un interm�diaire oui.
    D�s�rialiser ton objet en C++/CLI et construire une autre "liste" avec un des conteneurs de la stl, pour que ce soit utilisable en C++ pur

    un programme exemple
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    #include "stdafx.h"
    #include <windows.h>
    #include <vcclr.h>
    #include <iostream>
    #include <vector>
     
    using namespace System;
    using namespace System::Collections;
     
    int main(array<System::String ^> ^args)
    {
    	// construction de l'arraylist avec des objets simples de type string
    	ArrayList ^list = gcnew ArrayList();
    	list->Add("truc");
    	list->Add("bidule");
    	list->Add("chouette");
     
    	// sérialisation
    	String ^resultSerialisation;
    	System::Xml::Serialization::XmlSerializer ^ sr = gcnew System::Xml::Serialization::XmlSerializer(ArrayList::typeid);
    	System::IO::TextWriter ^ writer = gcnew System::IO::StringWriter();
    	try
    	{
    		sr->Serialize(writer, list);
    		resultSerialisation = writer->ToString();
    	}
    	catch (Exception ^ e)
    	{
    		Console::WriteLine("Impossible de sérialiser : " + e->Message);
    		return 0;
    	}
    	finally
    	{
    		writer->Close();
    	}
     
    	// désérialisation
     
    	ArrayList ^listClone;
    	System::IO::TextReader ^reader = gcnew System::IO::StringReader(resultSerialisation);
    	try
    	{
    		listClone = (ArrayList^)sr->Deserialize(reader);
    	}
    	catch (Exception ^ e)
    	{
    		Console::WriteLine("Impossible de désérialiser : " + e->Message);
    		return 0;
    	}
    	finally
    	{
    		reader->Close();
    	}
     
    	// parcours de la list pour construire un std::vector de std::string
    	std::vector<std::string> vectorNatif;
    	for each(String ^s in listClone)
    	{
    		// au passage, on transforme (marshalle) la chaine managée en chaine native
    		char * chaineChar;
    		pin_ptr<const wchar_t> wch = PtrToStringChars(s);
    		int taille = (s->Length+1) * 2;
    		chaineChar = new char[taille];
    		int t = WideCharToMultiByte(CP_ACP, 0, wch, taille, NULL, 0, NULL, NULL); 
    		WideCharToMultiByte(CP_ACP, 0, wch, taille, chaineChar, t, NULL, NULL); 
    		std::string chaineSTL = chaineChar;
    		vectorNatif.push_back(chaineSTL);
    		delete chaineChar;
    	}
     
    	// parcours du vector
    	for (unsigned int i = 0 ; i < vectorNatif.size() ; i++)
    		std::cout << vectorNatif[i].c_str() << std::endl;;
     
    	return 0;
    }

  9. #9
    Membre confirm� Avatar de anas.eh
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    181
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 181
    Par d�faut
    J'ai cr�� un projet C++ .NET accompagnant mon projet C#, j'ai essayer le code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <windows.h>
    #include <vcclr.h>
    #include <iostream>
    #include <vector>
    using namespace System;
    using namespace System::Collections;
     
    int main()
    {
     
    return 0;
    }
    Mais quand je veux compiler il me retourne une erreur :

    Error 1 fatal error C1190: managed targeted code requires a '/clr' option c:\program files\microsoft visual studio 8\vc\include\vcclr.h 16
    Je sais pas comment le faire, j'ai une autre question, comment appeler un programme C++ .NET par C#.

    Merci,

  10. #10
    Membre confirm� Avatar de anas.eh
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    181
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 181
    Par d�faut
    Ok c bon, j'ai r�solu ce probl�me, la solution je l'ai trouv�e ici :http://dotnet.developpez.com/faq/cpp...onmode#clronly

    Merci.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Ecrire/lire des cookies par s�rialisation/concat�nation
    Par Jean-Seba dans le forum G�n�ral JavaScript
    R�ponses: 8
    Dernier message: 30/11/2010, 10h36
  2. Lire un fichier par bloc de n*m bytes
    Par chaka_zulu dans le forum Langage
    R�ponses: 1
    Dernier message: 24/05/2007, 07h26
  3. Lire fichier ligne par ligne
    Par Tips dans le forum Shell et commandes GNU
    R�ponses: 8
    Dernier message: 05/03/2007, 21h07
  4. Lire un fichier par la fin
    Par romaintaz dans le forum Entr�e/Sortie
    R�ponses: 1
    Dernier message: 22/01/2007, 16h40
  5. R�ponses: 6
    Dernier message: 16/12/2006, 15h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo