Frage

Ich habe ein kommerzielles Produkt, das eine DLL (native 32-Bit-Code) ist, und es ist Zeit jetzt eine 64-Bit-Version zu bauen. Also, wenn sie auf 64-Bit-Windows-Installation, die 32-Bit-Version geht in Windows \ SysWOW64, und die 64-Bit-Version geht in ... Windows \ System32! (Ich biss mir auf die Zunge hier ...) Oder die DLL (n) kann neben der Client-Anwendung installiert werden.

Was soll ich die 64-Bit-DLL-Namen?

gleichen Namen wie 32-Bit: Zwei Dateien, die das gleiche tun, haben den gleichen Namen, aber sind völlig nicht-austauschbar. Ist das nicht ein Rezept für Verwirrung und Support-Probleme?

Verschiedene Namen (zB product.dll und product64.dll): Jetzt Client-Anwendungen müssen wissen, ob sie laufen 32-Bit oder 64-Bit, um meine DLL zu verweisen, und es gibt Sprachen, in denen das nicht bekannt ist, bis zur Laufzeit - wobei .NET nur ein Beispiel. Und jetzt alle statisch kompilierte Kunden haben die Einfuhranmeldungen konditionalisieren: IF target = WIN64 importieren Sie dann Blah von "product64.dll" ELSE Import Blah von "product.dll" ENDIF

Das Produkt enthält große Mengen an C-Code und einen großen Teil von C ++ -. Es zu C # zu portieren, ist keine Option

Ratte? Vorschläge?

War es hilfreich?

Lösung 3

Ich habe beschlossen, Microsoft auf diesem zu folgen, die die gleichen Namen für den DLLs in System32 gehalten haben, wenn sie auf 64-Bit gingen. Auf Win7 / 64, System32 \ avicap32.dll ist ein 64-Bit-DLL!

Es gibt einige mögliche Verwirrung für mich und meine Kunden, mit 32-Bit und 64-Bit-DLLs mit dem gleichen Namen. Aber ich denke, es wäre noch schlimmer alle haben, um meine Kunden zu haben, ihre Code-Wort-Breite empfindlich zu machen. Vor allem die .NET-Entwickler, die oft ihre Zielplattform Set ‚AnyCPU‘ verlassen kann.

Andere Tipps

Client-Anwendungen nicht müssen "wissen", sie sind 32-Bit oder 64-Bit. Das Betriebssystem automatisch lädt DLLs von der entsprechenden Stelle, weil es nicht möglich ist, einen 32-Bit-DLL in einen 64-Bit-Prozess zu laden, und es ist nicht möglich, einen 64-Bit-DLL in einen 32-Bit-Prozess geladen werden.

Wenn eine 32-Bit-Anwendung versucht, Last etwas von system32, das Betriebssystem wird es still in das Verzeichnis SysWow64 umleiten, wodurch die 32-Bit-Version zu laden.

Durch unterschiedliche Namen haben, können Sie diesen ganzen Mechanismus besiegen. Ein Mechanismus gebaut speziell, damit Sie den gleichen Namen verwenden.

Warum das nicht Präfix DLL mit einem Unterstrich ... wie product_32.dll und product_64.dll ? OR angegeben dies durch eine Plattform Präfix - product_x86_32.dll und product_x86_64.dll ? Wenigstens das wird die Verwirrung der Namensgebung der DLL löschen ... Was denken Sie?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top