Bin ich wieder zu blöd?
-
Abend Jungs und Mädels,
anscheinend stell ich mich mal wieder so.
Dieser Code ergibt eine Assertation:
CThunderEditorLog::CThunderEditorLog() { #ifdef _DEBUG m_log.open("ThunderEditorLog.html"); CString strHeader; strHeader.LoadString(STRING_LOG_HEADER); m_log << (LPCSTR) strHeader; #endif } CThunderEditorLog::~CThunderEditorLog() { #ifdef _DEBUG CString strFooter; strFooter.LoadString(STRING_LOG_FOOTER); m_log << (LPCSTR) strFooter; m_log.close(); #endif }
Durchs Debuggen hab ich herausgefunden dass das nen Fehler auslößt:
AFXWIN_INLINE HINSTANCE AFXAPI AfxGetResourceHandle()
{ ASSERT(afxCurrentResourceHandle != NULL);
return afxCurrentResourceHandle; }Wenn ich bei der ASSERT-BoX ignore mache, funktioniert es mit dem schreiben wunderbar, aber warum entsteht der ASSERT?
-
Du hast bestimmt eine globale Variable von CThunderEditorLog angelegt?
Der Ctor wird dann vor den MFC-Initialisierungen aufgerufen.
Entweder du nimmst statt dem Ctor eine Memberfunktion die du dann z.B. in der CWinApp::Initinstance aufrufst oder etwas anderes als CString::LoadString.
-
Ich weiß zwar nicht was du mit CTor meinst, aber es könnte sein, dass es daran leigt dass ich diesesmal nicht den MFC Anwendungsassistenten benutze, und Ich extrig WinMain deklariert habe und auch benutzte. Also nicht CWinApp und InitInstance.
-
Juhu es hat sogar geklappt
-
Und wie war jetzt die Lösung?
-
Hmm, komsch, ich hab den String in den Ressourcen veränder tund es funktioniert nichtmehr, also es gibt wieder nen assert, naja ich hab jetzt die initalisierung und das closen ausen konstruktor und dem destruktor genommen und in eigene funktion(open/close) getan. Jetzt funktionierts, fragt mich jetzt nicht was da der fehler war, ich weiß es nicht.
-
Ctor == Constructor
Wie gesagt: Es hat nicht funktioniert da du LoadString aufgerufen hast bevor die MFC der Variable einen gültigen Wert zugewiesen hat.
-
// edit
hatz sich erledigt[ Dieser Beitrag wurde am 17.12.2002 um 13:48 Uhr von Nitromaus editiert. ]