Dialogbox öffnet sich nicht
-
Hallo allerseits,
als C++ neuling sitze ich jetzt schon seit über zwei Wochen an der dankbaren Aufgabe ein Programm das mit Borland 5.0 erstellt wurde (und damit auch einwandfrei funktioniert) auf einen anderen Computer zu portieren, der (leider) nur Visual C++ 6.0 zur Verfügung hat.
Nach einiger Weile habe ich es wenigstens soweit gebracht, dass der Quellcode Compiliert wird.

Leider läuft das Programm trotzdem nicht
Folgendes Problem tritt auf:
Das Programm startet zunächst mehrere Threads und es wird eine Verbindung aufbebaut. Dann soll eine Dialogbox geöffnet werden. Das Programm verhält sich nun so als ob die Dialogbox sich öffnet und sofort wieder schliesst. Und dann ist auch schon alles gelaufen, weil ja in der Dialogbox und ihrer Prozedur die eigentliche Arbeit meines Programmes liegt.

Im Borland Code wurde das Pragma argsused verwenet, das ja in Visual C++ nicht existiert. Dieses Pragma wurde verwendet, weil in der Procedur die der Dialogbox übergeben wird die LPARAM variable übergeben wird. Im Quellcode wird diese nicht weiter verwendet. Ich denke dass das Problem damit zusammenhängt nur leider weiss ich nicht, wie ich der Sache auf den Grund gehen kann.
Währe wirklich dankbar für Tipps jeder Art, wie ich die Ursache für mein Problem finden kann.
Viele Grüße, Beni (
Tiefkeller)
-
Da ich keine Glaskugel habe und nicht weiß wie du den Dlg erstellst kann ich nur raten.
Meinst passiert dies wenn man eine modeless-Dlg erstellt aber vergist das die Klasseninstanz beim verlassen der Funktion (wo der Dlg erstellt wird) auch nicht mehr existiert.
Somit wird der Dlg erstellt die CreateFunktion (drum ja nicht modal )kehrt nach Erstellung zurück und die funktion wird verlassen.
Bei verlassen wird der Dlg dann auch zerstört.
-
Was sagt GetLastError?
Ist ein RTF Feld in Deinem Dialog und Du hast AfxInitRichEdit oder InitCommonControls nicht aufgerufen?
-
Erstmal vielen Dank für euer schnelles Antworten.
> Ist ein RTF Feld in Deinem Dialog und Du hast AfxInitRichEdit oder InitCommonControls nicht aufgerufen?
Hört sich für mich ziemlich kompliziert an, aber ich denke nein!
Also wegen der Glaskugel muss ich sagen, dass meine Leider gerade defekt is, drum muss es ein Auszug aus dem Quellcode bringen:Die Dialogbox wird mit folgendem Befehl erstellt:DialogBox( hInstance, MAKEINTRESOURCE(MAIN_WINDOW), NULL, MainWindowProc );wobei hInstance beim Starten des Programmes als argument übergeben werden soll und MainWindowProc die Prozedur ist mit der diese Dialogbox gesteuert wird.
Die Deklaration dieser Prozedur sieht wie folt aus:BOOL WINAPI MainWindowProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );hierbei wird gerade das Argument lParam nicht explizit in der Prozedur verwendet. Deshalb wurde für den Borland Compiler das Pragma argsused verwendet. Bin mir aber an der Stelle nicht sicher ob das für die Prozedur wichtig ist (also ob dieser Parameter irgendwie implizit Verwendung findet). Bzw. wie der Borland Compiler das im Vergleich zum VC++ interpretiert, da ich keine Ahnung habe wie ich diese Information von dem entsprechenden Compiler bekomme.
> Meinst passiert dies wenn man eine modeless-Dlg erstellt aber vergist das die Klasseninstanz beim verlassen der Funktion (wo der Dlg erstellt wird) auch nicht mehr existiert.
> Somit wird der Dlg erstellt die CreateFunktion (drum ja nicht modal )kehrt nach Erstellung zurück und die funktion wird verlassen.
> Bei verlassen wird der Dlg dann auch zerstört.Würde das dann mit Borland funktionieren und nicht VC++? Denn mit dem Borland kompiler funktionierts ja!
Weiterhin dankbar für tipps
Tiefkeller