编译时出现:‘OpenThread”: undeclared identifier

本文解决了在VC6.0环境下使用OpenThread函数时出现的未声明标识符错误。通过调整Microsoft Platform SDK for Windows XP SP2与VC98文件夹中头文件的优先级顺序来解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    最近做一个项目,基于公司的一个产品进行开发,使用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 如下图:

‘OpenThread’: <wbr>undeclared <wbr>identifier <wbr&
gt;问题的解决

单击该菜单,出现一个警告对话框,单击ok 后 我们再到VC 6.0 去看一下, 就会发现 Win XP sp2 SDK 的相关头文件和库文件 已经包含进来,而且是在VC98 目录的前面,如下图:

‘OpenThread’: <wbr>undeclared <wbr>identifier <wbr&
gt;问题的解决

‘OpenThread’: <wbr>undeclared <wbr>identifier <wbr&
gt;问题的解决

VS 2003 上直接建一个 MFC 应用程序,是可以直接使用 OpenThread 函数的。这次只是因为我要使用 这个软件是使用VC 6.0 开发的 ,直接使用 VS 2003 打开编译毫无疑问会遇到很多语法错 误 , 如类型转换等 错误,因为 VS 2003 的语法检查比 VC 6.0 要严格,解决这个问题要花费较多时 间。

 

解决这个问题给了我一个思路:通过优先设置最新 SDK 的路径,可以让我们使用最新的 SDK ,同时又可以使用低版本的编译器编译工程,降低工程在不同版本编译器 移植的成本。

或者:

typedef  HANDLE  (*OPENTHREAD)  (DWORD  dwFlag,  BOOL  bUnknow,  DWORD  dwThreadId); 
OPENTHREAD 
lpfnOpenThread  (OPENTHREAD)GetProcAddress(LoadLibrary("kernel32.dll"),"OpenThread"); 
HANDLE 
hThread  lpfnOpenThread(THREAD_SET_CONTEXT,  FALSE,  __dwMainThreadId); 
这样用即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值