Was ist das für eine Fehlermeldung
-
hallo leute!
Ich habe eine seltsame fehlermeldung bekommen in einem MDI Projekt in dem ich GetFtpConnection verwende.
WinInet.lib ist inkludiert und das afxinet.h gibts natürlich auch.
Der Fehler trat auf als ich zu einem bestehenden Modell mit HINTERNET hinterntSession eine CFtpConnection machte. Ich weiß aber nicht ob es daran liegt. Ich hoffe jemand kennt diese fehlermeldung und kann mit helfenn..
danke
Dieser Text kommt beim kompilieren in einem popup:
Debug Assertion Failed!
File: AfxWin1.inl
Line:27PS: hab auch einen screenshot...
-
Falls du den MFC-Quellcode mit installiert hast, kannst du in diese Datei einfach reinschauen:
_AFXWIN_INLINE LPCTSTR AFXAPI AfxGetAppName() { ASSERT(afxCurrentAppName != NULL); return afxCurrentAppName; }Hast du mal mit dem Debugger geprüft, wie es zu diesem Aufruf kommt, und wie der Callstack aussieht?
-
ja diese Methode hab ich mir angesehen, werd aber nicht schlau daraus. Ich denke viel eher das da eine Kollision zwischen HINTERNET hInternetSession; und
CFtpConnection* ftp; CInternetSession net; besteht. Ich will auf CFtp umstellen. kann sein das beides zusammen den Fehler verursacht. Was meinst du?lg
l00P
-
l00P schrieb:
Was meinst du?
Ich meine, du sollst mit dem Debugger prüfen, wie es zu diesem Aufruf kommt, und wie der Callstack aussieht.
-
...leider kenne ich mich mit dem debugger noch nicht so gut aus und weiß auch nicht was ein callstack ist. Kannst du mit bitte weiterhelfen?
das ist der teil der in Call STack drinnen steht????
AfxGetAppName() line 27 + 33 bytes
CInternetSession::CInternetSession(const char * 0x00000000, unsigned long 1, unsigned long 0, const char * 0x00000000, const char * 0x00000000, unsigned long 0) line 425 + 5 bytes
tsg_transaction:
:x() + 52 bytes
tsg_transaction::tsg_transaction() line 45 + 61 bytes
E215() + 29 bytes
_initterm(void (void)* * 0x0042a218 $S216, void (void)* * 0x0042a338 ___xc_z) line 525
WinMainCRTStartup() line 274 + 15 bytesdanke
l00P[cpp]
-
Ich nehme mal an, dass tsg_transaction eine Klasse von dir ist.
Legst du davon zufällig eine globale oder statische Instanz an?
-
soviel ich weiß nicht, habe den code nicht selber geschrieben sondern geerbt

Das Problem trat auf als ich die bestehenden ftp connection mit HINTERNET umschrieb in CInternetSession und CFtpConnection. Alle sachen mit HINTERNET habe ich auskommentiert und ersetzt. Vertragen die sich nicht oder was??
lg
-
Ich vermute, dass da Instanzen von MFC-Klassen erstellt werden, bevor das MFC-Framework vollständig initialisiert ist.
-
danke schonmal für deine mühe,
aber kannst du mir sagen wie ich das kontrollieren kann? Ist wirklich ein scheiß error, sitze schon 3 Tage herum und probiere

Der Fehler begann als ich CFtpConnection* ftp;
CInternetSession net;
CInternetFile* pFileHandle;einfügte.
class tsg_transaction { private: struct x { //HINTERNET hInternetSession; //HINTERNET hFTPSession; //HINTERNET hFileHandle; CFtpConnection* ftp; CInternetSession net; CInternetFile* pFileHandle; //for get_remote_file_handle() DWORD fileSize; DWORD bytesSend; DWORD bytesReceived; }tsg_ftp_control_elem; // thread added ;get file params int error; CString remotefile; CString localfile; HANDLE hEvent; ... ... ...
-
Irgendwo in dem Programm gibt es eine globale Instanz von tsg_transaction. Die wird zusammen mit allen anderen globalen Instanzen direkt beim Programmstart erzeugt, in undefinierter Reihenfolge. Da tsg_transaction einen Member vom Typ CInternetSession hat, wird dieses Objekt auch gleich mit erstellt.
Da es sich um eine MFC-Anwendung handelt, gibt es irgendwo auch ein globales MFC-Objekt, z.B. eine Instanz einer von CWinApp abgeleiteten Klasse.
Wenn nun die tsg_transaction-Instanz vor der CWinApp-Instanz erzeugt wird, könnte das diesen Fehler verursachen. Da du auf die Reihenfolge der Erzeugung keinen direkten Einfluss hast, kannst du das nur lösen, indem du entweder die tsg_transaction-Instanz nicht global erstellst, oder aus dem CInternetSession-Member einen Zeiger machst, den du auf eine erst bei Bedarf dynamisch erstellte Instanz zeigen lässt.
-
wow, ich habs geschafft, es ist genau so wie du sagtest, ich habe aus CInternetSession einen Pointer gemacht und nur bei bedarf mit = new eine Instanz gemacht :-))
herzlichen Dank, du hast mir sehr geholfen.
mfg
l00P