2011-10-04 90 views
1

我有一个共享的DLL,它是内置在32位和64位。两个版本都使用相同的名称foo.dll。如何在系统上安装两个foo.dlls,以便我的32位和64位应用程序在他们的路径中找到正确的dll。同一系统上的64位和32位非托管dll - 最佳实践?

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

+0

是不是用于64位dll的SysWOW64? –

+1

@Bali C编号SysWow64适用于32张图像,system32适用于64位图像。其实有一些逻辑! –

+0

@DavidHeffernan对啊,我不知道,谢谢! –

回答

2

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

请注意,我排除了任何依赖SxS版本控制的解决方案。试图走下去的路线导致各种各样的复杂和令人头痛的任何人尝试使用您的DLL。

+0

谢谢。我很怀疑。 –

0

你没有说明你是如何安装你的二进制文件或如何装载或安装的,但我推测解决方案将涉及32位和64位安装的单独安装目录。

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

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

+0

谢谢。我会尝试。 –

+0

Program Files文件夹不受文件重定向程序的限制。当你链接到库时,你需要考虑库搜索路径而不是GetSpecialFolder,CSIDL等。这个建议对于安装时间是合理的,但与运行时DLL加载无关,即LoadLibrary。 –

+0

谢谢大卫。听起来像这样对我不起作用。 –

相关问题