Hallo. Angenommen es soll eine 64Bit c# dll erzeugt werden. Diese Dll soll also auf 64Bit OS auch wirklich als 64Bit laufen und nicht unter dem WOW64 Zweig. Nun habe ich einen 32Bit Rechner, mit dem ich mittles VS2010 diese dll mit der Zielplattform 64 bit erstellen möchte. Gibt es einen Unterschied ob ich mit VS2010 auf einen 32Bit Rechner 64Bit Anwendungen erstelle, oder VS2010 direkt auf 64bit laufen lasse.(Es gibt ja eh nur eine 32bit VS10 Version)? Gibt es Einschränkungen in dem Falle? [32bit Rechner] [64bit Rechner] | | | VS2010 64bit 32bit | | 64bit dll--> App
Benno schrieb: > Gibt es einen Unterschied ob ich mit VS2010 auf einen 32Bit Rechner > 64Bit Anwendungen erstelle, oder VS2010 direkt auf 64bit laufen > lasse.(Es gibt ja eh nur eine 32bit VS10 Version)? > Gibt es Einschränkungen in dem Falle? ich denke nein. Es wird ja nur in der Datei vermerkt für welche Plattform sie ist. Am Inhalt sollte sich dabei nichts ändern. Warum willst du die Datei fest auf 64bit setzen?
Peter II schrieb: > Benno schrieb: >> Gibt es einen Unterschied ob ich mit VS2010 auf einen 32Bit Rechner >> 64Bit Anwendungen erstelle, oder VS2010 direkt auf 64bit laufen >> lasse.(Es gibt ja eh nur eine 32bit VS10 Version)? >> Gibt es Einschränkungen in dem Falle? > > ich denke nein. Es wird ja nur in der Datei vermerkt für welche > Plattform sie ist. Am Inhalt sollte sich dabei nichts ändern. > > Warum willst du die Datei fest auf 64bit setzen? Sie soll dem Anwender als reale 64bit dll yur Verfuegung stehen.
Benno schrieb: > Sie soll dem Anwender als reale 64bit dll yur Verfuegung stehen. die frage ist warum? lass es doch Windows entscheiden ob es als 32bit oder 64bit ausführt. So musst du ja 2 Versionen ausliefern, falls jemand nur ein 32bit System hat.
Habe ich gerade gelesen: Visual Studio installiert die 32-Bit-Version der CLR auf einem x86-Computer und sowohl die 32-Bit-Version als auch die entsprechende 64-Bit-Version der CLR auf einem 64-Bit-Windows-Computer. Es gibt anscheinend 2 CLRs. Die 32bittige auf dem 32bit Host und die 64bittige, wobei VS10 32bittig im WOW64 liegt. Resultiert daraus auch unterschiedlicher Code?
Benno schrieb: > Es gibt anscheinend 2 CLRs. Die 32bittige auf dem 32bit Host und die > 64bittige, wobei VS10 32bittig im WOW64 liegt. Resultiert daraus auch > unterschiedlicher Code? wie schon oben geschrieben, ich glaube nicht. Klar muss eine 32bit Runtime und eine 64bit Runtime vorhanden sein, sonnst könnte man ja nicht 32bit oder 64bit Programm starten.
Bau die DLL doch besser als AnyCPU, falls es deine Referenzen zulassen. Macht das Leben leichter ;-)
Was meinst du mit Referenzen? Ist das richtig, das mit AnyCPU eine dll 64bittig ist, wenn die Anwendung, die sie einbindet 64 bit ist, respektive 32bit, bei 32bit Anwendung?
Benno schrieb: > Ist das richtig, das mit AnyCPU eine dll 64bittig ist, wenn die > Anwendung, die sie einbindet 64 bit ist, respektive 32bit, bei 32bit > Anwendung? ja
Benno schrieb: > Was meinst du mit Referenzen? fall von der dll wiederrum anderen dll (die in C/C++) geschrieben sind verwendet, dann sind die ja 32 oder 64bit). Damit ist dann man auf die Plattform festgelegt.
Das es so funktioniert liegt, wenn ich richtig liege, an der Art und Weise, wie in .net Binarcode erzeugt wird. Also nur eine Assembly-Datei, die nur die Informationen ueber die Architektur auf die es laufen soll, enthält. Erst die CLR und der Just-In Compiler macht daraus den 32/64bittigen Binarcode. Ich komme aus der c++-Ecke, da war Binarcode noch wenigstens Binarcode(Maschinencode) ;-)
Noch eine Frage: Sollte ich mit AnyCPU immer Plattformabhängige Typen wählen(z.b.IntPtr) oder lieber normal int? Erzeugt mir denn die ClR mit der Option AnyCPU immer die richtige int Größe? 4Byte int würde ja die 64bittige Anwendung nicht vertragen.
Benno schrieb: > Sollte ich mit AnyCPU immer Plattformabhängige Typen wählen(z.b.IntPtr) > oder lieber normal int? wozu brauchst du in einer C# Anwendung IntPtr? Dieser wird doch nur im Zusammenhang mit anderen (C oder C++) dlls verwendet. Und wenn jeweils die passenden dll geladen wird, dann ist IntPtr auch der richtige Datentype. Du solltest eventuell etwas mehr zu dem Problem sagen, irgendwie kommen immer mehr neue Infos.
Benno schrieb: > Erzeugt mir denn die ClR mit der Option AnyCPU > immer die richtige int Größe? 4Byte int würde ja die 64bittige Anwendung > nicht vertragen. Du solltest Dir vielleicht mal die .Net-Typen genauer anschauen. System.Int32 (unter C# äquivalent zu int) hat immer 32 Bit, egal ob 64-Bit- oder 32-Bit-Plattform. Solchen Quatsch wie unter anderen Sprachen, dass int auf den einzelnen Plattformen unterschiedliche Größen haben könnte, gibt es unter .Net nicht. Grüße Markus
Falls du mit AnyCPU kompilierst und irgendwo, irgendwie, direkt oder indirekt eine 32-Bit-DLL angefunkt wird, knallt es auf einem 64-Bit-System. Meiner Erfahrung nach ist dies in ~80% aller Fälle, in denen ein .NET-Programm auf 64-Bit direkt beim Starten abstürzt, die Fehlerursache. Kurz: Wenn du keinen Grund hast, lass es bleiben. Wenn du glaubst, einen Grund zu haben, musst du das Ding sowieso auf einem 64-Bit-System testen, um herauszufinden, ob deine Annahme stimmt. BTW: Man kann mit corflags 32-Bit erzwingen, ohne das Programm neu zu kompilieren. https://msdn.microsoft.com/en-us/library/ms164699%28v=vs.110%29.aspx Das hat mich schon ein paar Mal bei oben genanntem Problem "gerettet".
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.