在Windows 2000中使用Visual Studio 2010编译的C ++ DLL发出问题

时间:2010-04-19 00:40:52

标签: c++ dll visual-studio-2010

我有一个非常简单的DLL,用非托管C ++编写,我从我的应用程序访问。我最近切换到Visual Studio 2010,并且DLL从55k下降到35k而没有更改代码,现在它将不再在Windows 2000中加载。我没有更改任何代码或编译器设置。我有 0x0500 的定义设置,其中应包括Windows 2000支持。有没有其他人遇到这个,或者对我能做什么有任何想法?

2 个答案:

答案 0 :(得分:12)

Visual Studio 2010 cannot build binaries that run on Windows 2000。实际上甚至比这更糟糕,they won't run on Windows XP RTM or Windows XP Service Pack 1 either。这是因为VS2010的C运行时库需要EncodePointer API,直到SP2才能使用。

如果您想支持早期版本的Windows,看起来您已经陷入了安装VS2008的困境。您可以将整个项目移动到Visual Studio 2008,也可以从Visual Studio 2010项目中定位vc90(Visual Studio 2008)工具集。有关后一种方法的更多详细信息,请参阅我的相关问题here

答案 1 :(得分:5)

解决方案可能是在单独的lib中提供EncodePointer(和DecodePointer,显然),并优先链接到KERNEL32.LIB。这是完全支持的方案。在过去,像“LIBCTINY”和“UNICOWS”这样的库已经使用这种优先链接机制来添加/替换来自另一个库的选定但不是所有函数。