Programm läuft unter Win XP aber nicht unter Win 2000
-
Ich habe ein Programm in C++ mit ATL/WTL in VC60 erstellt. Das Programm läuft soweit auch unter WinXP. Beim Start auf einem Windows 2000 Rechner startet das Programm jedoch nicht (ich habe mehrere Win2000 Rechner getestet). Der Mauszeiger erhält kurz die Sanduhr, der Prozess erscheint im Taskmanager, doch wird dann sofort wieder beendet. Es kommt keine Fehlermeldung oder ähnliches.
Vermutung:
Auch wenn es unter WinXP problemlos läuft ist mir aufgefallen, dass beim Initialisieren von ATL/WTL Klassen eine Exception geworfen wird. Dies passiert genau dann, wenn auch das Programm/Hauptfenster sichtbar wird. Ich nehme an, dass WinXP keine Probleme mit der Exception hat und trotzdem das Hauptfenster dargestellt und problemlos startet. Vielleicht reagiert Win 2000 da etwas empfindlicher.
Das Problem ist, dass zu dem Zeitpunkt wo der Fehler auftritt noch kein Quelltext von mir aufgerufen wird, sondern tief verschachtelt in Standardklassen der ATL/WTL auftritt. Ich habe keine Plan wie ich nun daran etwas ändern soll. Dass das Programm heute nicht läuft wird wohl auch Schadensersatzklagen mit sich bringen, daher wärs ganz gut, wenn man es überhaupt jemals zum Laufen bringen kann.Hat jemand ne Idee was das Problem sein könnte?
-
Ich habe die Ursache gefunden! Es ist das Steuerlement CDateTimePickerCtrl. Hat jemand ne Ahnung warum das nich tunter Windows 2000 läuft? Das ATL/WTL, VC60 ist doch schon uralt und kam schon raus bevor es WinXp gab?! Wieso läufts nicht unter Win 2000?
-
InitCommonControls vergessen? Dürfte allerdings keine Rolle bei einer MFC Applikation spielen.
Was genau passiert denn? Gibt es einen GetLastError?
Verwende doch mal Remote Debugging und gehe der Sache so auf den Grund.
-
Martin Richter schrieb:
InitCommonControls vergessen? Dürfte allerdings keine Rolle bei einer MFC Applikation spielen.
Was genau passiert denn? Gibt es einen GetLastError?
Verwende doch mal Remote Debugging und gehe der Sache so auf den Grund.Puh, da überfordest Du mich gerade ein wenig. InitCommonControls? RemoteDebugging? Also im Grunde mach ich ja nichts anders als das Steuerelement aus der Toolbox zu nehmen und es mit einem Klick hinzuzufügen und danach läuft es schon nicht mehr! Gibt es denn da überhaupt Möglichkeiten irgendwie Einfluß zu nehmen? Ich nutze in dem Projekt kein MFC, sondern nur ATL/WTL.
-
Um bestimmte Controls verwenden zu können muss InitCommonControls aufgerufen werden!
Zu Remote Debugging siehe hier:
http://www.richter-family.com/articles/howto remote debugging.htm
oder hier
http://www.mpdvc.de/artikel/RemoteDebugging.htm
-
Ich habs rausgefunden! (und weil ich es hasse, wenn Leute es gelöst haben, aber keine Lösung dazuschreiben (!), hier die Lösung: )
Ich hatte noch Infos auf codeguru gefunden. In denen waren diese beiden Zeilen beschrieben:INITCOMMONCONTROLSEX ics = { sizeof(INITCOMMONCONTROLSEX), ICC_DATE_CLASSES }; BOOL b = ::InitCommonControlsEx( &ics );Und damit isses dann auch gelaufen!

Dazu muss man aber noch folgendes inkludieren:
#include <atlctrlw.h>
-
plizer schrieb:
INITCOMMONCONTROLSEX ics = { sizeof(INITCOMMONCONTROLSEX), ICC_DATE_CLASSES }; BOOL b = ::InitCommonControlsEx( &ics );Und damit isses dann auch gelaufen!

Dazu muss man aber noch folgendes inkludieren:
#include <atlctrlw.h>InitCommonControls langt IMHO.
Die korrekte Include-Datei ist commctrl.h Die ATL Datei, die Du aufführst nutzt diese SDK Datei halt auch.
-
Martin Richter schrieb:
InitCommonControls langt IMHO.
Die korrekte Include-Datei ist commctrl.h Die ATL Datei, die Du aufführst nutzt diese SDK Datei halt auch.Du hast Recht. Mit der h-Datei funktioniert es auch (ich hatte es erst mit dieser versucht, aber noch ein Fehler bei den anderen beiden Zeilen gehabt)!