Absturz wenn Fremde Klasse Aufruf erzeugt



  • 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 mit

    p_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()


Anmelden zum Antworten