"Ultimate Grid" von VC++ 6.0 zu VC++9.0 fehler
-
Hallo
Wenn ich ein beispiel von Ultimate Grid unter VC++6.0 übersetze ist alles OK aber wenn das gleiche Beispiel in VC++9.0 übersetze kommt folgende Fehlermeldung:
c:\programmier\vc++6.0beispiele\ultimategrid72\1\ultimate grid\source\ugxpthemes.cpp(573) : warning C4091: '': Ignoriert auf der linken Seite von 'const int', wenn keine Variable deklariert wurde c:\programmier\vc++6.0beispiele\ultimategrid72\1\ultimate grid\source\ugxpthemes.cpp(573) : error C2143: Syntaxfehler: Es fehlt ';' vor 'Konstante' c:\programmier\vc++6.0beispiele\ultimategrid72\1\ultimate grid\source\ugxpthemes.cpp(573) : error C2106: '=': Linker Operand muss ein L-Wert seindem bin ich nachgegangen und bin auf folgenden code in der Datei ...\Ultimate Grid\Source\UGXPThemes.cpp gestoßen.
bool UGXPThemes::GetThemeRect(LPCWSTR theme, int iPartId, int iStateId, RECT *pRect) { bool success = false; if (useThemes) { HANDLE themeHandle = OpenThemeData(NULL, theme); if (themeHandle) {Fehler
const int TMT_DEFAULTPANESIZE = 5002;HRESULT hr = GetThemeRect(themeHandle, iPartId, iStateId, TMT_DEFAULTPANESIZE, pRect); success = SUCCEEDED(hr); } } return success; }Die Constante TMT_DEFAULTPANESIZE ist aber schon in der Datei VSSYM32.H definiert.
Wenn ich im oben gezeigten Code die Zeile auskommentiere läuft alles Super unter VC++9.0.Ist hier ein Bug ? Leigt hier ein Einstellungs Fehler im VC++9.0 vor oder...?
Gruß Califax
-
Hallo,
da das Symbol TMT_DEFAULTPANESIZE schon in aktuellen Windows-SDK-Headerdateien über ein #define eingeführt wird, kommt es zur Ersetzung:
const int 5002 = 5002;woraus sich die Fehler ergeben. Lässt man die Zeile weg, kann nichts passieren, weil die 5002 direkt in den GetThemeRect-Aufruf eingesetzt wird:
// noch vor dem Kompilieren durch Präprozessor ersetzt: HRESULT hr = GetThemeRect(themeHandle, iPartId, iStateId, 5002, pRectMfG,
Probe-Nutzer
-
Danke
Gruß Califax