MSDN verlängert

Knapp zwei Jahre sind seit dem letzten MSDN-Kauf schon wieder vergangen. Es wurde also langsam Zeit, sich über die Fortsetzung Gedanken zu machen. Am Dienstag habe ich deshalb wieder beim Softwarevertrieb Heine angerufen und eine neue OPEN-Lizenz bestellt. Schon zwei Tage später lagen die neuen Authorisierungs- und Lizenznummern in meinem Briefkasten.

Die Registrierung auf eOpen war schnell erledigt. Nach dem ersten Einloggen per Live-ID wurde zwar eine Seite mit

Ungültige Daten
Eingabedaten können keine Skriptelemente enthalten.

angezeigt, ein Löschen der entsprechenden Cookies schaffte aber Abhilfe. Mit etwas Glück klappte dann auch die Freischaltung des MSDN-Accounts, der entsprechende Link wurde nämlich zuerst nicht angezeigt. Auf der englischen Startseite wird auf mögliche Probleme hingewiesen:

We are experiencing performance issue with MSDN benefits link and Software Assurance Benefits Link. We apologize for any inconvenience this may cause.

Jetzt fehlt nur noch Windows 7 und Visual Studio 10 (10 is the new 6).

Verzwickter Code – Auflösung

Die Antwort von Marcus zum verzwickten Code war richtig. In Zeile 17 wird für die Fensterklasse zusätzlicher Speicher angefordert, um in Zeile 29 das Handle zum Elternfenster zu speichern. Unter Win32 funktioniert auch alles wie gewünscht.

Es wird aber nicht beachtet, dass unter Win64 ein Fensterhandle nicht mehr vier Byte groß ist (DWORD), sondern acht Byte. Somit ist in der Fensterklasse nicht mehr genug Platz, um das Fensterhandle zu speichern. SetWindowLongPtr setzt daher den Fehlercode ERROR_INVALID_INDEX.

Zeile 17 muss also korrigiert werden zu

        wcTaskSwitch.cbWndExtra = sizeof(HWND);

Letztlich ist die Speicherung des Elternfensters aber auch total überflüssig, denn dieses lässt sich jederzeit über GetParent abrufen. Aber warum einfach, wenn es auch kompliziert geht.

Durch diesen Fehler ist es nicht möglich, den in den Infobereich minimierten SpeedCommander in der x64-Version per Tastatur wieder zu aktivieren. Bisher war dies noch keinem aufgefallen.