Meine ersten Versuche unter VS2005 - HILFE!
-
Hi, ich habe gerade VS2005 installiert und habe schon ein Problem.
Unter CS6 ging das noch problemlos, ich hoffe, Ihr könnt mir helfen.
Ich habe einen kleinen ThreadUINT MyMFCThread(void* pParam) { CInstallDlg *pWnd; pWnd=(CInstallDlg*)pParam; pWnd->Install(); return (1); }Der jodoch zum Absturz führt:
http://img155.imageshack.us/img155/8109/errxh9.pngDer Fehler tritt in der Datei "wincore.cpp" auf und zwar hier:
if(pMap) { ASSERT( (p = pMap->LookupPermanent(m_hWnd)) != NULL || (p = pMap->LookupTemporary(m_hWnd)) != NULL); }Woran liegt das?
Was nun??
-
Also, ein ASSERT ist ein Hinweis, kein Absturz. Schau dazu auch mal ins Magazin, da ist ein Artikel über das Debuggen mit VC6 (da solltest du einiges übertragen können).
Wenn ich mir den Code so angucke, dann findet der ein Fenster nicht in seiner Liste.
Da ich leider keine Ahnung von Threads habe, kann ich da nicht weiter mutmaßen.
-
Es wäre hilfreicher zu wissen, was die letzte Zeile DEINES Quellcodes ist. Also mal debuggen und durch die Install-Methode steppen und die Zeile samt Kontext hier posten.
-
Filou204 schrieb:
UINT MyMFCThread(void* pParam) { CInstallDlg *pWnd; pWnd=(CInstallDlg*)pParam; pWnd->Install(); return (1); }Woran liegt das?
Was nun??
Das Problemist, dass CWnd Objekte threadafin sind. Man kann keinen Zeiger auf ein CWnd Objekt in einen anderen Thread weitergeben und es dort verwenden.
Das muss knallen! Genau an der Stelle, den Du hast ja keinen Eintrag in der Window map.Wenn Install keine Fenster Funktionen verwendet oder keine Nachrichten versendet ist es möglich denb Zeiger zu benutzen!
-
Wenn Install keine Fenster Funktionen verwendet oder keine Nachrichten versendet ist es möglich denb Zeiger zu benutzen
Ich danke Dir für den Hinweis!
Nein Install kopiert nur Dateien und schreibt Einträge in die Registry.
Wie soll ich den Zeiger benutzen?*pWnd->Install();So gehts nicht... Sorry, wenn ich mich so doof anstelle

-
Zeig doch mal die Install()-Methode.
(PS: Dein
pWnd->Install()ist technisch schon korrekt - abgesehen von den CWnd-typischen Problemen, die Martin angesprochen hat)
-
Da steht noch nicht viel drin!
Ich hab mit dem Programm erst heute Morgen angefangen.void CInstallDlg::Install(void) {/* BOOL bCheck = TRUE; BOOL bSetupErfolgreich = TRUE; DWORD dWait; HWND *handle = NULL; CString csCD; csCD = GetCurrentDirectory(); */ //Schreibschutz im Ordner C:\TIS aufheben///////////////////////////////////////////// m_csStatus = "Die Installation wird vorbereitet."; UpdateData(FALSE); }
-
Filou204 schrieb:
UpdateData(FALSE);Das ist eine der Anweisungen, die dein Arbeitsthread NICHT verwenden darf
UpdateData() tauscht Informationen mit dem WinAPI-Fenster aus und kann deshalb nur von dessen Besitzer-Thread ausgeführt werden.
-
Oh danke!!
Jetzt gehts!! Toll!!
Muss nur nen andern Weg finden wie ich dem Dialog den Fortschritt von dem Tread mitteile. Hats Du eine Idee?
-
PostMessage() (die Nachrichtenschleife wird vom Anzeigethread verwaltet, also darfst du von dort aus auch den Dialog verändern)
-
Danke ich teste es mal.
Zuerst muss ich aber mal das kopieren der Dateien und das Setzen der Registryeinträge hinbekommen....
-
<a href="http://xshorturl.info/r/free-ringtones.com.html">free ringtones</a>
-
<a href="http://xshorturl.info/r/free-ringtones.com.html">free ringtones</a>
-
<a href="http://xshorturl.info/r/free-ringtones.com.html">free ringtones</a>