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

Jon*_*ury 16 c++ dll visual-studio-2010

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

Bil*_*eal 12

Visual Studio 2010无法构建在Windows 2000上运行的二进制文件.实际上甚至更糟糕的是,它们也无法在Windows XP RTM或Windows XP Service Pack 1上运行.这是因为VS2010的C运行时库需要EncodePointer API,该API在SP2之前不可用.

如果你想支持早期版本的Windows,看起来你正在坚持安装VS2008.您可以将整个项目移动到Visual Studio 2008,也可以从Visual Studio 2010项目中定位vc90(Visual Studio 2008)工具集.有关后一种方法的更多详细信息,请参阅此处的相关问题.

  • @Jon:你不需要整个VS2008 IDE.如果您有编译器,链接器,头文件和库,则可以从VS2010中定位VS2008 C++工具链.请参阅http://blogs.msdn.com/vcblog/archive/2009/12/08/c-native-multi-targeting.aspx和http://blogs.msdn.com/vcblog/archive/2010/03/02 /visual-studio-2010-c-project-upgrade-guide.aspx (6认同)

MSa*_*ers 5

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