Problèmes avec un DATASET en C++
Résolu/Fermé
jamsss
Messages postés
36
Date d'inscription
dimanche 6 septembre 2009
Statut
Membre
Dernière intervention
19 septembre 2011
-
Modifié par jamsss le 18/09/2011 à 18:56
jamsss Messages postés 36 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 19 septembre 2011 - 19 sept. 2011 à 21:38
jamsss Messages postés 36 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 19 septembre 2011 - 19 sept. 2011 à 21:38
4 réponses
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
3 015
18 sept. 2011 à 22:55
18 sept. 2011 à 22:55
Je pense qu'il est possible de faire des tableaux directement avec des String^
Sinon les cast c'est quand tu "convertis l'interprétation de la mémoire", là le problème c'est que les objets ^ ne sont pas situés dans la même mémoire que les objets * donc un cast ne peut pas suffire, il faut changer les données de mémoire, ce qui s'appelle du marshalling.
Tu peux regarder sur la MSDN, Comment : convertir System::String en chaîne standard
Sinon les cast c'est quand tu "convertis l'interprétation de la mémoire", là le problème c'est que les objets ^ ne sont pas situés dans la même mémoire que les objets * donc un cast ne peut pas suffire, il faut changer les données de mémoire, ce qui s'appelle du marshalling.
Tu peux regarder sur la MSDN, Comment : convertir System::String en chaîne standard
jamsss
Messages postés
36
Date d'inscription
dimanche 6 septembre 2009
Statut
Membre
Dernière intervention
19 septembre 2011
Modifié par jamsss le 19/09/2011 à 21:18
Modifié par jamsss le 19/09/2011 à 21:18
Bonjour,
Tout d'abord merci de ta réponse, en effet avec cette fonction ça marche plutôt bien.
Pour ce qui est de faire les tableaux directement avec des String^ j'ai essayé avec le code suivant:
mais je me heurte à une erreur au moment de l'allocation de la mémoire:
error C3698: 'System::String ^' : impossible d'utiliser ce type comme argument de 'nouveau'
Alors j'ai essayé la méthode du C:
La il semblerait que ça fonctionne, pas d'erreur à la compilation mais un plantage avec ceci:
HEAP CORRUPTION DETECTED: after Normal block (#125) at 0x012868F8, CRT detected that the application wrote to memory after end of heap buffer.
Une idée ?
Est ce qu'il y a une solution avec new...delete, à mon avis ce serait mieux que d'utiliser le malloc...free du c même si cela a l'air de (presque) fonctionner..
Merci d'avance ;-)
Tout d'abord merci de ta réponse, en effet avec cette fonction ça marche plutôt bien.
Pour ce qui est de faire les tableaux directement avec des String^ j'ai essayé avec le code suivant:
private: System::Void Btnload_Click(System::Object^ sender, System::EventArgs^ e) { dsArticle1->Clear(); oleDbDataAdapter1->Fill(dsArticle1); String^ *tableau; tableau=new String^; tableau[0]=dsArticle1->ARTICLE->Rows[0][0]->ToString(); MessageBox::Show(tableau[0]); delete tableau; }
mais je me heurte à une erreur au moment de l'allocation de la mémoire:
error C3698: 'System::String ^' : impossible d'utiliser ce type comme argument de 'nouveau'
Alors j'ai essayé la méthode du C:
private: System::Void Btnload_Click(System::Object^ sender, System::EventArgs^ e) { dsArticle1->Clear(); oleDbDataAdapter1->Fill(dsArticle1); String^ *tableau; tableau=(String^*)(malloc(sizeof(String^))); tableau[1]=dsArticle1->ARTICLE->Rows[1][1]->ToString(); MessageBox::Show(tableau[1]); free(tableau); }
La il semblerait que ça fonctionne, pas d'erreur à la compilation mais un plantage avec ceci:
HEAP CORRUPTION DETECTED: after Normal block (#125) at 0x012868F8, CRT detected that the application wrote to memory after end of heap buffer.
Une idée ?
Est ce qu'il y a une solution avec new...delete, à mon avis ce serait mieux que d'utiliser le malloc...free du c même si cela a l'air de (presque) fonctionner..
Merci d'avance ;-)
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
3 015
19 sept. 2011 à 21:26
19 sept. 2011 à 21:26
Comme je l'ai dit hier les objets ^ ne sont pas dans la même mémoire que les objets * donc ce n'est pas possible de les mélanger et de faire des ^* des malloc ou des new.
Les allocations de mémoire des objets ^ se fait avec gcnew, exemple :
Les allocations de mémoire des objets ^ se fait avec gcnew, exemple :
array<String ^> ^ tableau = gcnew array<String ^>(10); // par exemple
jamsss
Messages postés
36
Date d'inscription
dimanche 6 septembre 2009
Statut
Membre
Dernière intervention
19 septembre 2011
19 sept. 2011 à 21:38
19 sept. 2011 à 21:38
ok merci