Stack Overflow
-
Hallo,
ich hab 2 Klassen bzw. 2 Dialoge in meiner Anwendung, sobald ich von dem ersten Dialog in den anderen wechsele, und dann wieder in den ersten vom zweiten springe, möchte ich wieder den zweiten Dialog per Knopfdruck auf meinem Dialog aufmachen, jedoch kriege ich da ein Stack Overflow...
hab schon versucht mit dem Debugger ein breakpoint zu setzen, da wo der Konstruktor der zweiten Klasse aufgerufen wird, jedoch kommt er nie dahin...wo muss ich den ein Breakpoint setzen, bzw. was geschieht noch vorher oder was könnte das Problem sein, beim ersten Aufruf des zweiten Dialogs wird er ja ganz normal aufgemacht...ich tue mal einbisschen Code rein...
//#include "AppsUser.h" class CMenue : public CDialog { // Konstruktion public: CMenue(CWnd* pParent = NULL); // Standardkonstruktor CMenue(CDBAnbindung dBConnection, CAppsUser AppUserObject, ISaGsaRpConnection rPConnection, CWnd* pParent=NULL); // Konstruktor mit Connect-Objekt CMenue(CDBAnbindung dBConnection, ISaGsaRpConnection rPConnection, CWnd* pParent=NULL); // Konstruktor mit Connect-Objekt ISaGsaRpConnection GetRpConnectionObject(); void SetRpConnectionObject(ISaGsaRpConnection rPObject); CDBAnbindung GetDBConnectionObject(); void SetDBConnectionObject(CDBAnbindung dBObject); CAppsUser GetAppUserConnectionObject(); void SetAppUserConnectionObject(CAppsUser AppUserObject); ...
Das ist der erste Dialog...
Der Aufruf des zweiten Dialog geschieht wie folgt:
void CMenue::OnApi() { if (rPConnection.IsConnected()){ rPConnection.Disconnect(); if (rPConnection.GetFailed()) { AfxMessageBox(rPConnection.GetErrorText()); rPConnection = ISaGsaRpConnection(); } } CDialog::OnOK(); Anmeldung api(CMenue::GetDBConnectionObject(), CMenue::GetRpConnectionObject(), this); api.DoModal(); api.ShowWindow(SW_SHOW); delete rPConnection; }
Der zweite Dialog sein Header ist:
#include "AppsUser.h" class Anmeldung : public CDialog { // Konstruktion public: Anmeldung(CWnd* pParent = NULL); // Standardkonstruktor Anmeldung(CDBAnbindung dBAnbindung, CAppsUser AppUserAnbindung, ISaGsaRpConnection rPConnection, CWnd* pParent = NULL); // Standardkonstruktor mit RpConnection-Object Anmeldung(CDBAnbindung dBAnbindung, ISaGsaRpConnection rPConnection, CWnd* pParent = NULL); // Standardkonstruktor mit RpConnection-Object ISaGsaRpConnection GetRpConnectionObject(); void SetRpConnectionObject(ISaGsaRpConnection rPObject); CDBAnbindung GetDBConnectionObject(); void SetDBConnectionObject(CDBAnbindung dBObject); CAppsUser GetAppUserConnectionObject(); void SetAppUserConnectionObject(CAppsUser AppUserObject); ...
Der erste Dialog wird dann wie folgt wieder aufgerufen:
void Anmeldung::OnNaechsteSeite() { if (rPConnection.IsConnected()) { CDialog::OnOK(); CMenue dUI(Anmeldung::GetDBConnectionObject(), Anmeldung::GetRpConnectionObject(), this); dUI.DoModal(); delete rPConnection; }else{ CDialog::OnOK(); CMenue dUI(this); dUI.DoModal(); } UpdateData(false); }
...hab keine Ahnung, was da los sein könnte....
-
wäre es nicht besser unmodale Dialoge zu benutzen?
-
jetzt ganz blöd gefragt, warum?ich mein, der Unterschied ist doch nur, dass der modlae Dialog immer im Vordergrund ist, und der andere nicht...
-
Hallo,
ich bin grad dabei meine Anwendung zu debuggen, um endlich auf die Spuren des Fehlers zu kommen...was mir aufgafallen ist, ist folgendes...
Nachdem das Pgm aus dem zweiten Dialogfenster wieder zurück in das erste springt...
CDialog::OnOK(); CMenue dUI(Anmeldung::GetDBConnectionObject(), Anmeldung::GetRpConnectionObject(), this); dUI.DoModal();
und der Konstruktor die Methode GetDBConnectionObjekt() aufruft...
CDBAnbindung Anmeldung::GetDBConnectionObject() { return m_DBAnbindung; }
...wird nochmal der Konstruktor der Klasse CDBAnbindung durchlaufen und alle Werte neu initialisiert, das ist doch nicht normal, oder?
...bitte helft mir, ich weiss nicht mehr weiter...
gruss,
chullain