Thomas Woelfers Baustatik Blog

Baustatik-Software und was sonst des Weges kommt

.Net: Übersetzen für 64 Bit mit Visual Studio

Wenn man ein Managed-Code Projekt hat das auf einer 32bit Windows-Platform läuft, und man möchte das nach 64bit Windows portieren, dann ist die Sache verhältnismässig einfach: Man muss nämlich gar nichts tun.

Von Haus aus generiert Visual Studio ohnehin keinen nativen Code, der wird erst beim laden der Assemblies, also zur Laufzeit des Programms erzeugt. Das geht völlig transparent, ohne das man gesonders tätig werden muss. Hat man also eine .Net Anwendung die unter 32bit Windows läuft, muss man das Ding einfach nur auf den 64bit Windows Rechner kopieren. Startet man die Kopie, hat man automatisch eine 64bit Anwendung.

Zumindest in der Theorie, denn in der Praxis muss man dann doch noch tätig werden. Und zwar dann, wenn man auch Unmanaged Code verwendet. Von den 'unmanaged' Libraries braucht man nämlich 'echte' 64bit Varianten - und das gilt sowohl für eigenen Code, als auch für Libraries von anderen. Dazu zählt auch sowas wie DirectX etc. pp..

Hat man nun den Fall, das man eine Library (noch) nicht in einer 64bit Variante vorliegen hat, und übersetzt man seine Solution auf einem 64bit System, dann gibt es Probleme: Beim Debuggen wird das Programm gestartet und der 64bit Code erzeugt - doch der ruft dann irgendwann Code auf der nur in einer 32bit Variante vorliegt - und es gibt eine Exception.

Es bleibt einem also nichts anderes übrig als sich darum zu kümmern, das eben kein 64bit sondern 32bit Code generiert wird. Der offensichtliche Weg ist dabei der, in den Projekten der Solution die Build-Option von 'AnyCPU' auf 'x86' umzustellen. Das ist allerdings sehr ärgerlich, vor allem wenn man viele Projekte hat und später einmal eine 64bit Version bauen will.

Es geht aber auch anders: Man braucht nämlich nur das Projekt, das das 'Startprogramm' erzeugt umzustellen: Wenn der ladende Prozess ein 32bit Prozess ist, dann wird auch 32bit Code generiert wenn man sich auf einer 64bit Platform befindet. 

Comments are closed