Comment dois-je nommer une DLL native distribuée dans les deux 32 bits et forme 64 bits?

StackOverflow https://stackoverflow.com/questions/2385480

  •  24-09-2019
  •  | 
  •  

Question

J'ai un produit commercial qui est une DLL (native code 32 bits), et maintenant il est temps de construire une version 64 bits de celui-ci. Ainsi, lors de l'installation sur Windows 64 bits, la version 32 bits passe dans Windows \ SysWOW64, et la version 64 bits passe en ... Windows \ System32! (Je mords ma langue ici ...) Ou la DLL (s) peut être installé à côté de l'application cliente.

Que dois-je nommer la DLL 64 bits?

Même nom que 32 bits: Deux fichiers qui font la même chose, ont le même nom, mais sont totalement non interchangeables. Est-ce pas une recette pour des problèmes de confusion et de soutien?

Les différents noms (par exemple product.dll et product64.dll): Maintenant, les applications clientes doivent savoir si elles sont en cours d'exécution 32 bits ou 64 bits afin de référencer ma DLL, et il y a des langues où ce n'est pas connue jusqu'à ce que la gestion du temps - .NET étant un exemple. Et maintenant, tous les clients compilés statiquement doivent les déclarations mettent des conditions à l'importation: IF target = WIN64 importez Blah de « product64.dll » Blah importation ELSE de « product.dll » endif

Le produit contient des quantités massives de code C, et une grande partie de C ++ -. Portage vers C # est pas une option

conseils? Suggestions?

Était-ce utile?

La solution 3

J'ai décidé de suivre Microsoft à ce sujet, qui ont gardé les mêmes noms pour les DLL dans System32 quand ils sont allés à 64 bits. Sur Win7 / 64, System32 \ avicap32.dll est une DLL 64 bits!

Il y a une certaine confusion possible pour moi-même et mes clients, ayant DLL 32 bits et 64 bits avec le même nom. Cependant, je pense que ce serait pire d'avoir tous mes clients doivent faire leur code sensible mot largeur. En particulier, les développeurs .NET, qui peuvent laisser souvent leur plate-forme cible réglée sur « AnyCPU ».

Autres conseils

Les applications clientes ne "savent" pas doivent ils sont 32 bits ou 64 bits. Le système d'exploitation charge automatiquement les DLL de l'emplacement approprié, car il est impossible de charger un 32 bit DLL dans un processus de 64 bits, et il est impossible de charger une DLL 64 bits dans un processus de 32 bits.

Si une application 32 bits essaie de quelque chose de charge à partir system32, le système d'exploitation silencieusement rediriger vers le répertoire SysWow64, forçant la version 32 bits à charger.

En ayant des noms différents, vous battez ce mécanisme. Un mécanisme conçu spécialement pour vous permettre d'utiliser le même nom.

Pourquoi préfixe pas les dll avec un trait de soulignement ... comme product_32.dll et product_64.dll ? OU indiqué cela en utilisant un préfixe de plate-forme - product_x86_32.dll et product_x86_64.dll ? Au moins qui effacera la confusion de la désignation de la DLL ... Que pensez-vous?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top