CString ASSERT

anmae

Erfahrenes Mitglied
Hallo,

ich habe eine public Funktion in einer von CDialog abgeleiteten Klasse welche einen Tect in ein Ausgabefenster schreibt. Von dieser Klasse aus geht das auch super.
nun habe ich eine von CSocket abgeleitete Klasse welche die Funktion so aufruft:

Code:
CDb_SockServerDlg* pDlg = (CDb_SockServerDlg*)AfxGetApp();
CString msg;
msg = usr + ": eingeloggt";
pDlg->debug(msg);


Funktion:
void CDb_SockServerDlg::debug(CString out)
{
	m_out.Format("%s%s",out,_T("\r\n")); //ASSERT in dieser Zeile
	mc_out.SetWindowText(m_out);
	mc_out.LineScroll(mc_out.GetLineCount()-1);
	this->RedrawWindow();
}


Assert bei:
_AFX_INLINE CStringData* CString::GetData() const
	{ ASSERT(m_pchData != NULL); return ((CStringData*)m_pchData)-1; }

ich bekomme bei dem Aufruf immer diesen Assert.
Wieso?

Danke schonmal.
 
Was sagt denn der Stack wenn Du einen Breakpoint nach
msg = usr + ": eingeloggt";
machst.
Wird das denn schon ordentlich gefüllt?

Wenn ja, probier mal den Aufruf per Referenz:
Code:
void CDb_SockServerDlg::debug(CString& out)

oder benutz mal CStringT.

Einfach mal ausprobieren, da Du ja nicht viele Informationen preisgegeben hast.
 
Zuletzt bearbeitet:
mir ist grad was anderes aufgefallen:
wenn ich die ersten Zeilen wegnehme, und die SetWindowText direkt mit out aufrufe :

mc_out.SetWindowText(out);

dann bekomme ich einen Assert bei isWindow() - m_hWnd ist 0x0.

Das Fenster ist aber schon lange da, der Code wird erst viel später nach dem Init und bestehender Socketverbindung aufgerufen.

kann es sein das mit der AfxGetApp() was nicht klappt?
 
Ach mann.

ich:=Depp;

mit AfxGetMainWnd() klappt es natürlich.

den Dialog mit GetApp zu bekommen is natürlich Schwachsinn.

Schande über mich :)

danke nochmal für die Mühe
 
Zurück