Absturz wenn Fremde Klasse Aufruf erzeugt
-
Hallo Unix-Tom,
meinst du ich soll statt der Dlg-Klasse einfach folgendes verwenden?
[cpp]CString h ="123";
CTest zug;
zug.dropperpfad(h);[/cpp]Ich hoffe ich stelle mich nicht allzu blöde an, wo das doch
ganz sicher zu den Basics gehört
-
Ok, dieser ominöse this-Zeiger ist wohl der Knackpunkt?!
Kann mir bitte jemand sagen wie man damit in diesem Fall arbeitet?
-
Hmm,..ich mache es doch eigentlich genauso wie hier auch
beschrieben...??http://www.c-plusplus.net/forum/viewtopic-var-t-is-169814-and-highlight-is-dialog+funktion.html
I need some correction if i am that wrong please

-
Ich denke das Dir hier die Grundlagen fehlen und es würde zu weit führen dir diese beizubringen.
Als Ansatz:
this ist ein zeiger auf seine eigene Klasse (Man möge mir verzeihen das ich keine Fachbegriffe verwendet habe)Wenn du eine anderen Dialog erstellst kannst du diesem den this-Zeiger übergeben und kannst dann vom anderen Dialog (Klasse) mittels dem thiszeiger auf die andere Klasse zugreifen.
Dies ist aber nur ene von vielen Möglichkeiten und sicher nicht die schönste.
Es würde z.B. auch mit eine Message gehen.
Aber wie gesagt fehlen dir dazu die Grundlagen.
-
Hmm, verstehen würde ich das schon gerne.
Wenn:
int x = 10;dann ist das doch identisch mit
this->x=10;oder
(*this).x=10;Das ist etwas was ich inzwischen bereits versucht habe.
Ich hoffe richtig...this->GetDlgItem(IDC_EDIT1)->SetWindowText(x);Der Fehler bleibt jedoch der gleiche = Absturz.
Ich wäre dir dankbar, wenn du mir dennoch helfen könntest.
Es ist ja nicht so, dass ich daraus nichts lernen könnte, oder wollte.Gruß
Kunibert
-
du kannst nicht einfach von deinem 2ten dialog per this auf den ersten zugreifen.
du übergibst eine zeiger auf den dialog.
schau mal in die FAQ. Da habe ich vor jahren mal eine Code gepostet der eine this an einen Thread übergibt.
Diese Arbeit solltest dir die Lösung schon wert sein.
-
Ich habe die 6 Seiten FAQ durchwühlt, aber bin mir nicht sicher wie
ich da nun wirklich vorgehe (ganz ehrlich).CString h ="c:\\test"; CTestDlg* xg = NULL; xg = new CTestDlg(this); // du meinst diesen Part oder? xg->dropperpfad(h);Ich vermute da, dies auch falsch ist, dass es mir auch niemand weiter
versuchen wird beizubringen, was ich verstehen kann, aber schade finde.Ich halte mich an google und versuche weiter mein Glück

Sollte ich die Lösung noch finden poste ich hier, damit irgendwann mal
jemand, der auch so frishc dabei ist wie ich, sich die Arbeit nicht nochmal machen muss!
-
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39101.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39041.html
Auch wenn es um Threads geht aber der Klasse welche von CWinTrhread abgeleitet ist wird der this des Dialogs übergeben.
-
Ich habe es doch m.E. schon so gemacht:
1. include der Hauptklasse in die neue Klasse des Unterdialoges.
2. Zeiger auf Hauptklasse:CHauptklasse* p_x;3. Aufruf einer Funktion des Hauptdialoges über deren Zeiger
p_x->Funktion(x);In dem Beispiel wird ja noch zuvor SetOwner gerufen. Da ich aus dem Unterdialog
den Hauptdialog aufrufe vermute ich mal ich muss hier nicht mitp_x->SetOwner(this),sondern sowas wie
p_x->SetOwner(GetParent());verwenden ?
Dennoch ist im Hauptdialog (wo ich auch ankomme in der Funktion), der
Fehler, dass er bei Zugriff auf Steuerelemente des selben, abstürzt.Aber die Funktion ist doch schon im Hauptdialog angekommen und die Funktion
auch Teil dessen:CHauptdialogDlg::Funktionxy(CString x);Ich gebe mir wirklich mühe das zu verstehen

-
ich denke SendMessage(..) wird mich da wohl ebenso ans Ziel bringen

-
Ist denn p_x auch Initialisiert?
-
Ich bin mir nicht sicher was du meinst.
Ich denke der Zeiger auf die Hauptklasse reicht aus?
-
im "ten Dialog muss du eine Funktion setowner (name egal) haben. In der Klasse des 2ten Dlg braucht du auch
CHauptklasse* p_x;In der Funktion setowner
p_x = pOwner;
Nun kannst du im 2ten Dialog auf die Klasse des Hauptdialogs zugreifen mit
p_x->wasauchimmer()