同一系统上的64位和32位非托管dll - 最佳实践?

时间:2011-10-04 15:45:28

标签: windows dll 32bit-64bit

我有一个共享的dll,内置32位和64位。两个版本都使用相同的名称foo.dll。如何在系统上安装两个foo.dll,以便我的32位和64位应用程序在其路径中找到正确的dll。

Windows本身使用SysWOW64(用于32位dll)和System32(用于64位dll)。我想避免部署到这些文件夹。两个位中的dll在同一个盒子中共存并被链接到它们的相应应用程序找到的可接受方式(如果有的话)是什么?

2 个答案:

答案 0 :(得分:2)

如果您没有部署到受文件重定向限制的文件夹(即system32),那么您几乎需要为DLL提供不同的名称。原因是DLL搜索路径在32位和64位进程之间共享,如果您依靠搜索路径来定位DLL,则会强制您使用不同的名称。

请注意,我排除任何依赖SxS版本控制的解决方案。试图沿着那条路走下去会导致各种尝试使用你的DLL的并发症和头痛。

答案 1 :(得分:0)

您没有说明如何安装二进制文件或者如何加载或安装它们,但我猜测该解决方案将涉及为32位安装和64位安装提供单独的安装目录。

传统上,安装在64位计算机上的32位应用程序通常会安装到“c:\ program files(x86)”而不是“c:\ program files”的子文件夹中。我假设调用GetSpecialFolder的32位应用程序和设置(包括MSI)将被重定向到c:\ program files(x86)目录。

您不必担心在32位操作系统上安装64位二进制文​​件。只是阻止它在设置中发生,因为这些二进制文件无论如何都不会加载。