Problèmes avec un DATASET en C++

Résolu
jamsss Messages postés 36 Statut Membre -  
jamsss Messages postés 36 Statut Membre -
Bonjour,

je débute en visual C++ et j'ai écrit un bout de code pour récupérer les données d'un Datset dans une variable pour pouvoir l'exploiter :

private: System::Void Btnload_Click(System::Object^  sender, System::EventArgs^  e) 
    { 
     dsArticle1->Clear(); 
     oleDbDataAdapter1->Fill(dsArticle1); 
     String^ variable; 
     variable=dsArticle1->ARTICLE->Rows[0][0]->ToString(); 
     MessageBox::Show(variable); 
    }



Ce code marche mais mon problème est que j'ai été obligé pour ça de créer une variable de type string^, moi ce que voudrais c'est mettre ces données dans un tableau de string donc un pointeur de string, j'ai essayé de faire un cast mais ça ne fonctionne pas...
Merci d'avance de votre aide ;-)

4 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
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
0
jamsss Messages postés 36 Statut Membre
 
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:

    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 ;-)
0
KX Messages postés 19031 Statut Modérateur 3 020
 
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 :

array<String ^> ^ tableau = gcnew array<String ^>(10); // par exemple
0
jamsss Messages postés 36 Statut Membre
 
ok merci
0