‘OpenThread”: undeclared identifier 问题的解决之道
朱金灿
最近做一个项目,基于公司的一个产品进行开发,使用VC 6.0进行开发,使用到Win API函数OpenThread函数,编译时出现:‘OpenThread”: undeclared identifier 的问题。我查了一下msdn, 其配置要求是:
Requirements
Windows NT/2000/XP: Included in Windows 2000 and later.
Windows 95/98/Me: Included in Windows Me.
Header: Declared in Winbase.h; include Windows.h.
Library: Use Kernel32.lib.
我很奇怪,这个VC 6.0应该支持的啊。开始我以为这是缺补丁之故,把VC 6.0sp6装上(之前已经安装了sp5),编译依然出现‘OpenThread”: undeclared identifier的错误。我上网查了一下资料,发现是Platform SDK版本过低的缘故,于是到网上下载了Win XP sp2 SDK,然后在VC的Tools——〉Option菜单的Include Files和Library Files把Win XP sp2 SDK的相关头文件和库文件的路径添加进去,然后编译程序,发现依然出现:
‘OpenThread”: undeclared identifier的错误。
我又查了一下MSDN, 发现OpenThread函数是在Winbase.h声明的。我把VC安装目录下的VC98文件夹的Winbase.h和Microsoft Platform SDK for Windows XP SP2目录下的Winbase.h都打开比较了一下,发现在Microsoft Platform SDK for Windows XP SP2目录下的Winbase.h对OpenThread函数有声明,而VC98文件夹的Winbase.h则没有。由此我猜到了原因所在:因为在Tools——〉Option菜单的Include Files和Library Files把VC98的头文件和库文件设在Microsoft Platform SDK for Windows XP SP2的前面,因此编译器肯定是优先使用Winbase.h,而不使用Microsoft Platform SDK for Windows XP SP2目录下的Winbase.h,因此解决办法是在Tools——〉Option菜单的Include Files和Library Files把二者的顺序挪一下,把把Win XP sp2 SDK的相关头文件和库文件放在VC98的头文件和库文件的前面,让编译器优先使用。那么能不能把VC98的头文件和库文件在Tools——〉Option菜单的Include Files和Library Files直接删除呢?答案是不行的,因为Microsoft Platform SDK for Windows XP SP2并不包含所有VC98目录下的头文件和库文件,如expct.h和msvcrt.lib。
实际上后来我发现安装完Microsoft Platform SDK for Windows XP SP2在开始菜单上有一组菜单,其中的一个菜单项是:Register PSDK Directorues with visual studio如下图:
单击该菜单,出现一个警告对话框,单击ok后我们再到VC 6.0去看一下,就会发现Win XP sp2 SDK的相关头文件和库文件已经包含进来,而且是在VC98目录的前面,如下图:
在VS 2003上直接建一个MFC应用程序,是可以直接使用OpenThread函数的。这次只是因为我要使用这个软件是使用VC 6.0开发的,直接使用VS 2003打开编译毫无疑问会遇到很多语法错误,如类型转换等错误,因为VS 2003的语法检查比VC 6.0要严格,解决这个问题要花费较多时间。
解决这个问题给了我一个思路:通过优先设置最新SDK的路径,可以让我们使用最新的SDK,同时又可以使用低版本的编译器编译工程,降低工程在不同版本编译器移植的成本。
‘OpenThread”: undeclared identifier 问题的解决之道相关推荐
- c2061 dword 语法错误_解决'PMIB_ICMP_EX':undeclared identifier
FreeEIM 飞鸽传书编译问题总结,最近对FreeEIM 进行了更新,结果编译的时候出现了许多错误,是什么导致这些错误呢?我花了半天时间才得以解决,现在总结一下. ----------------- ...
- error C2065: : undeclared identifier 解决方法
error C2065: 'IDD_VIDEONETDLG' : undeclared identifier 开发平台:VC++6.0 出现错误:error C2065: 'IDD_VIDEONETD ...
- error:use of undeclared identifier
HLS中error:use of undeclared identifier 问题描述 在编写HLS代码过程中,使用流数据时报错,说我的标识符未声明.但是分明是定义了的,HLS编译器不认识. 错误位置 ...
- [Android]Android studio编译程序时报错: error: use of undeclared identifier ’free free(t);
原文地址:https://blog.csdn.net/u010005281/article/details/78611389 问题描述:程序之前可以正常运行,后来更新了一系列部件之后编译不通过,报了好 ...
- Error C2065 'cout': undeclared identifier
1 [问题背景]C++/MFC中出现 Error C2065错误,即未定义xxx错误,而你使用的xxx是基础类库的,你心里想不可能不存在呀.当然排除你拼写错误的情况,咱不讨论这种情况. 2 [分 ...
- 'main' : function should return a value; 'void' return type assumed/////undeclared identifier
'main' : function should return a value; 'void' return type assumed 'c' : undeclared identifier 在调试c ...
- 使用Ultra Librarian导入封装到AD18运行UL_Form.pas报错Undeclared identifier:ImportAscllData
问题 在TI官网下载的封装库后在AD18中直接打开UL_Form.pas和UL_Import.pas两个文件,运行UL_Form.pas并导入.txt文件时报错Undeclared identifie ...
- C语言nullptr错误,编译错误'nullptr'未声明的标识符(Compile error 'nullptr' undeclared identifier)...
编译错误'nullptr'未声明的标识符(Compile error 'nullptr' undeclared identifier) 我打算用Visual Studio 2008 Express编译 ...
- c语言编程undeclared,c语言中undeclared identifier是什么意思?
"undeclared identifier"是指"未声明的标识符",是C语言中一种报错提示:一般是使用的变量或者函数没有定义,或者是定义的时候和调用的时候不一 ...
最新文章
- CMPP3.0 长短信实现方案
- GDCM:DICOM文件的输入和输出流测试程序
- python: 判断字符串是否为合法的json格式
- 使用named_mutex和named_condition配合实现读写锁
- 【问题收集·知识储备】Xcode只能选择My Mac,不能选择模拟器如何解决?
- linux中如何查看某个端口是否被占用,LINUX中如何查看某个端口是否被占用
- 北斗系统学习:JTT808协议初步解析
- 为什么有时不能正确定位到异常的发生位置?
- poj3414 Pots
- Java、JSP大学生助学贷款管理系统的设计与实现
- 毫米和像素怎么换算_像素和毫米怎么换算啊??
- php 视频分割,如何把一个视频分成两段或多段 视频切割软件
- java代码随机取名字
- 方法重写的一大两小两同
- APP“自动续费”,挖坑式赚钱有违商业伦理
- git push origin HEAD
- ST MCSDK 初探
- 【计算机组成原理】计算机组成原理背景
- php files 转数组,转 PHP文件上传$_FILES数组各键值含义说明
- 清明节海报设计软件测试,PS清明节海报设计教程