3

我有一个 DLL(本机 32 位代码)的商业产品,现在是时候构建它的 64 位版本了。所以在 64 位 Windows 上安装时,32 位版本进入 Windows\SysWOW64,64 位版本进入... Windows\System32!(我在这里咬我的舌头......)或者DLL可以与客户端应用程序一起安装。

我应该如何命名 64 位 DLL?

与 32 位同名:两个文件执行相同的操作,具有相同的名称,但完全不可互换。这不是造成混乱和支持问题的秘诀吗?

不同的名称(例如 product.dll 和 product64.dll):现在客户端应用程序必须知道它们是运行 32 位还是 64 位才能引用我的 DLL,并且有些语言在运行之前不知道 -时间 - .NET 只是一个例子。现在所有静态编译的客户端都必须对导入声明进行条件化: IF target=WIN64 THEN import Blah from "product64.dll" ELSE import Blah from "product.dll" ENDIF

该产品包含大量 C 代码和大量 C++ - 将其移植到 C# 不是一种选择。

建议?建议?

4

4 回答 4

2

客户端应用程序不必“知道”它们是 32 位还是 64 位。操作系统会自动从适当的位置加载 DLL,因为无法将 32 位 DLL 加载到 64 位进程中,也无法将 64 位 DLL 加载到 32 位进程中。

如果 32 位应用程序尝试从 system32 加载某些内容,操作系统会静默地将其重定向到 SysWow64 目录,从而强制加载 32 位版本。

通过使用不同的名称,您可以击败整个机制。一种专门为允许您使用相同名称而构建的机制。

于 2015-11-07T17:22:05.633 回答
1

为什么不在 dll 前加上下划线……例如product_32.dllproduct_64.dll?或者通过使用平台前缀来表示这一点 - product_x86_32.dllproduct_x86_64.dll?至少这将消除 DLL 命名的混乱......你怎么看?

于 2010-03-05T09:31:23.757 回答
0

我决定在这方面跟随微软,当他们进入 64 位时,他们在 System32 中保留了相同的 DLL 名称。在 Win7/64 上,System32\avicap32.dll 是一个 64 位的 DLL!

对于我自己和我的客户来说,使用同名的 32 位和 64 位 DLL 可能会造成一些混淆。但是,我认为让我的所有客户都必须使他们的代码字宽敏感会更糟。尤其是 .NET 开发人员,他们经常可以将目标平台设置为“AnyCPU”。

于 2010-04-28T22:53:12.303 回答
0

某些调用 DLL 的语言具有根据调用应用程序位数调整其名称的机制。
例如在LabVIEW中,当使用以下两种模式之一时,可以自动调整 DLL 名称:

  1. MyDll*.dll将在 win32 上转换为MyDll32.dll,在 win64 上转换为MyDll64.dll
  2. MyDll**.dll将在 win32 上转换为MyDll.dll,在 win64 上转换为MyDll_64.dll(注意下划线)。

因此,以 32 位和 64 位二进制形式分发的本地 DLL 的建议命名方案是: | | win32 | win64 | |:--------- |:-------------|:---------------| | 方案一 | MyDll32.dll| MyDll64.dll | | 方案二 | MyDll.dll | MyDll_64.dll|

如果两个 DLL 必须在同一个文件夹中 - 例如在应用程序旁边,则使用不同的名称可能很有用。

注意:如果你不需要不同的名字,我同意doug65536 的回答。如果将 DLL 安装在 Windows 系统文件夹(SysWOW64 和 System32)中,最好对两个位使用相同的名称 MyDll.dll,并在需要时让 Windows 发挥它的魔力。

于 2022-01-10T10:57:03.617 回答