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
Version imprimable
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
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
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 ?
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.
=> Comment d�serialiser un ArrayList de C# avec C++ ?Citation:
le C++/CLI sait travailler avec les arraylist
C'est-�-dire impl�menter mon propre serializer, c'est �a ?Citation:
maintenant, si tu veux faire une d�s�rialisation native, il va surement falloir impl�menter ton propre traducteur.
D�sol� mais je comprend pas bien le terme natif :?.
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 :aie:
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 ?
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:
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; }
J'ai cr�� un projet C++ .NET accompagnant mon projet C#, j'ai essayer le code :
Mais quand je veux compiler il me retourne une erreur :Code:
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; }
Je sais pas comment le faire, j'ai une autre question, comment appeler un programme C++ .NET par C#.Citation:
Error 1 fatal error C1190: managed targeted code requires a '/clr' option c:\program files\microsoft visual studio 8\vc\include\vcclr.h 16
Merci,
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.