VS编译版本设置, 无法定位程序输入点...及无法定位序数...

本文讨论了在VS2010中,由于`_WIN32_WINNT`宏定义导致的程序在较低版本Windows系统上运行时出现"无法定位程序输入点"错误的问题。建议通过使用函数指针来解决因使用特定版本Windows API引发的兼容性问题,以避免编译错误和运行时异常。
摘要由CSDN通过智能技术生成

  vs2010会自动生成一个targetver.h文件,这个文件只有一个语句:
  #include <SDKDDKVer.h>
该文件中有这样一个定义: #define _WIN32_WINNT 0x0601
0x0601指的windows7.这个语句的意思是指编译程序时,使用windows 7版本系统头文件,可以理解为windows 7支持的API,结构等等都可以使用.但这样做也会产生一个问题,那就是低于win7版本的系统为本会支持win7定义的一些结构(或者其成员),API,或枚举类型(或其成员)等等.

  在这种情况下,不能为了支持版本的系统而修改_WIN32_WINNT的定义,例如: #define _WIN32_WINNT 0x0501,这个定义会导致VS只编译windowsxp支持的结构,API等等,如果程序中使用了win7支持API,结构等等,会发现编译错误.因为程序只能向下兼容,不能向上兼容.

  正确的做法是在程序中修改代码,如果是windows7中定义的函数而没有在winxp中定义,则使用函数指针,否则,将可能发生"无法定位程序输入点xxx于动态链接库xxx.dll上"类似错误.例如下面的调用:

GetProductInfo(osvi.dwMajorVersion, osvi.dwMinorVersion, 0, 0, &dwType);

这个函数是在win7中定义,在winxp系统中运行程序(编译时_WIN32_WINNT定义为0x0601),则会发生弹出一个对话框提示错误: "无法定位程序输入点Getproductinfo于动态链接库kernel32.dll上".并且,这个对话框是在执行到main函数之前弹出的.解决该问题的办法是使用函数指针,例如:


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值