2010-07-14 96 views
2

我已经在Windows Server 2008 64位版本上编译了一个dll。它可以在该版本的Windows上正常工作,但是如果我切换到Windows 7或XP 64位版本,dll不起作用。我如何使dll兼容所有三个64位版本的Windows版本?如何使64位DLL与64位版本的Windows Server 2008,Windows 7和Windows XP兼容?

我使用Visual Studio 2010中

+3

您可能有一些DLL或其他类似的东西的依赖。尝试进程监视器来查看失败。 – sharptooth 2010-07-14 06:27:01

+1

他确实,CRT的DLL版本毫无疑问。 – 2010-07-14 08:34:57

回答

3

您可以使用一个名为Dependency Walker,看看哪些依赖你的.dll文件有程序,并消除是Windows版本之间的不同的人。

+0

我试过,可以ü指导我在哪里把dll放在c:\ windows \ wow64system或dll放在根文件夹中 – 2010-07-14 06:32:11

2

检查您的DLL中如何定义_WIN32_WINNTWINVER宏。要使您的DLL与Windows XP兼容,您应该将它们定义为0x0501。这可以让你在编译时找到所有的依赖问题。有关这些宏的更多信息,请参阅here

+0

以及在项目设置下的链接器设置中,使用它被定义为WIN32; NDEBUG; _WINDOWS; _USRDLL; ADHANDLLDLDLL_EXPORTS,我也使用SECURITY_WIN32和WIN32_DCOM宏没有_WIN32_WINNT和WINVER被定义在我认为。我有什么可以让dll依赖于任何其他操作系统的dll吗? – 2010-07-14 07:30:04

+0

检查'stdafx.h',它可以在那里定义。如果没有明确定义'_WIN32_WINNT',则编译器会将其设置为编译DLL的操作系统的最高可能值。 – 2010-07-14 07:43:21