CStringArray weitergeben
-
Hallo,
Ich öffne einen neuen Dialog bei drücken eines bestimmten Buttons. Dieser Dialog enthält nur eine mehrzeilige Editbox und zeigt mir den gespeicherten String in einer Datei an (mit Zeilenumbrüchen und allem drum und dran) weil ich vorher nur eine einzeilige EditBox benutze die den String auf 40 Zeichen zuschneidet und nur die anzeigt. Das Problem ist jetzt aber, dass in diesem neuen Dialog logischerweise der CStringArray in dem das alles gespeichert ist nicht vorhanden ist. Ich lese das in einer separaten Klasse aus. Nun meine Frage: Wie kann ich dem neuen Dialog den gesamten Inhalt des Arrays weitergeben um ihn dort normal zu benutzen? Ich dachte an folgendes:
Als erstes mal einen Pointer zur neuen Klasse erstellen(public)
CMeasDocCommentDlg* pMDCD;
Danach erstellen des neuen Fensters:
void CMeasDocEditorDlg::OnButtonOpenComment() { UpdateData(TRUE); if(buttonOpenCommentPossible == TRUE) { pMDCD = new CMeasDocCommentDlg; pMDCD->pCommentArray = &CMD.commentLines; //Hier sollte die Adress-Weitergabe des gewünschten CStringArrays geschehen pMDCD->Create(IDD_COMMENTLINES); pMDCD->SetWindowPos(0, 494, 447, 250, 100, SWP_SHOWWINDOW); } UpdateData(FALSE); }
Hier in der neuen Dialogklasse das deklarieren des neuen CStringArrays:
CStringArray* pCommentArray;
Und zu guter letzt die eigentliche Funktion im NEUEN Dialog die das auslesen soll:
void CMeasDocCommentDlg::GetCommentData() { int commentArraySize = 0; int commentArrayCounter = 0; CString currentLine; CString wholeArray; commentArraySize = pCommentArray->GetSize(); for(commentArrayCounter = 0; commentArrayCounter < commentArraySize; commentArrayCounter++) { currentLine = pCommentArray->GetAt(commentArrayCounter); wholeArray = wholeArray + "\\n" + currentLine; } m_strEditCommentLines = wholeArray; }
Wieso funktioniert das nicht? Wenn ich die Applikation starte und auf den Button drücke der den Dialog öffnen soll bringt er mir einen Speicherfehler (Die Anweisung "0x5f478b7b" verweist auf Speicher "0xcdcdcdd5". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden...). Wenn ich im Debugger Zeile für Zeile abchecken möchte gibt er mir bei "commentArraySize = pCommentArray->GetSize();" (siehe letztes Quote) einen "Unhandled exception in MeasDocEditor.exe: 0xC0000005: Access Violation" Fehler. Ich schliesse daraus dass er irgend ein Problem hat mit der Übergabe der Adresse des CStringArrays. Kann mir einer helfen oder weiss jemand wie ich nicht nur die Adresse sondern gerade das ganze Array weitergeben kann? Danke im Voraus...
-
Wenn du als Adresse cdcdcdcd oder ähnlich siehst, hast du mit hoher Wahrscheinlichkeit vergessen, einen Zeiger zu initialisieren...
-
Ich bin mit Zeigern leider nicht sehr vertraut aber ist "CStringArray* pCommentArray;" nicht das initialisieren des Zeigers? Oder ist das etwas anderes?
-
So, es funktioniert nun. Was den Pointer betrifft habe ich alles richtig gemacht nur ein kleiner Fehler ist mir beim Programm unterlaufen: Ich habe beim Konstruktor des kleinen Dialogs die Funktion aufgerufen die die Daten holt. Da ich jedoch die Adresse erst einen Schritt später übergebe kannte er das noch nicht. Jetzt habe ich einfach "pMDCD->GetCommentData();" gemacht beim drücken des Buttons...
-
Ein Initialisieren eines Zeigers ist etwas mit einen =
Also:
CStringArray* pCommentArray = NULL;
oder
CStringArray* pCommentArray = new irgendwasanderes;
oder
CStringArray* pCommentArray = &arrAnderesStringArray;
Gibt noch ein paar andere Versionen...