找不到“windows.h”之谜

【C/C++】 Visual Studio2019找不到windows.h Visual Studio2019找不到windows.h1.背景2.原因分析3.解决办法3.1 windows10打开Visual Studio Installer3.2 修改3.3 单个组件中勾选windows10 sdk3.4 等待安装3.5 重启3.6 项目属性配置 1.背景 在windows10下通过IDE:Visual Studio2019社区版写C++代码的时候,出现警告提示:如下: 编译的时候报错:无法打开包括文件:“windows.h”: No such file or director 阅读详情

今天要运行一个简单的C++程序,如下:
//C++ code  让任务管理器的CPU使用产生一条正弦曲线图
#include <Windows.h>
#include "stdlib.h"
#include "math.h"
#include <stdio.h>

const double SPLIT = 0.01;
const int COUNT = 200;
const double PI = 3.14159265;
const int INTERVAL = 300;
int main(int argc, char* argv[])
{
 DWORD busySpan[COUNT];  //array of busy times
 long int idleSpan[COUNT];  //array of idle times
 int half = INTERVAL / 2;
 double radian = 0.0;
 for(int i = 0; i < COUNT; i++)
 {
  busySpan[i] = (long int)(half + (sin(PI * radian) * half));
  idleSpan[i] = INTERVAL - busySpan[i];
  radian += SPLIT;
 }

 long int startTime = 0;       
 int j = 0;
 while (true)
 {
  j = j % COUNT;
  startTime = GetTickCount();
  while ((GetTickCount() - startTime) <= busySpan[j]) ;
  Sleep(idleSpan[j]);
  j++;
 }
 return 0;
}
由于比较简单,就直接用editplus编辑成task.cpp文件,想在控制台中用cl.exe直接编译一下运行。
1、将cl.exe的path环境设置。
我安装的是VS2008 Team版。所出将“C:/Program Files/Microsoft Visual Studio 9.0/VC/bin”添加至PATH环境变量中。具体设置:我的电脑->属性->高级->环境变量,在出现的环境变量对话框中,选择path变量,编辑即可。
2、如果这时你运行cl task.cpp,会出现“没有找到mspdb80.dll”的错误,所出要同时将mspdb80.dll的路径加入path环境变量。路径为:“C:/Program Files/Microsoft Visual Studio 9.0/Common7/IDE”。
3、要在控制台中编译Win32程序,当然还得手动需设置include、lib环境变量(详细见http://blog.youkuaiyun.com/memory_xj/archive/2008/10/27/3156887.aspx),这很有点复杂,还好VS2008为我们将这些设置命令编成了vsvar32.bat文件,我们只需执行即可。
   在这里,我的噩梦来了。根据很多资料,包括著名的jjhou先生在《深入浅出MFC》中都指出应执行:C:/Program Files/Microsoft Visual Studio 9.0/VC/bin目录下的vsvars32.bat。如果程序中没有#include <windows.h>这一切是会很正常的。执行cl task.cpp出现了“fatal error C1034:windows.h:不包括路径集”的错误。从这里我就开始了很长一段时间的解决之路。
4、首先是搜索,看看这个windows.h究竟藏在什么地方。发现在“C:/Program Files/Microsoft SDKs/Windows/v6.0A/Include”中有一个,但这个目录和VS2008有什么关系呢?先不管,在include环境变量中加入这个目录,再cl编译一下,唉,又出现在这个windows.h中include的另一个头文件找不到了。当时,我以为这个目录是SDK的一个目录,应该和VS2008没有任何关系,就不想在这上面花功夫了,后来发现是错了,其实VS2008中的$(WindowsSdkDir)环境变量就是对应这个目录。如果根据错误提示,在include环境变量中一直将所需的目录添加上的话,可能也会很快解决windows.h的问题。
5、接着,脑子里竟冒出重装VS2008的想法,不过很快否定了,VS2008太大了。必竟是在控制台中编译,是不是SDK的问题呢?以下是找到的资料和我自己的理解:
    SDK即software develope kit(软件开发工具包),它包含了进行Windows软件开发的文档和API函数的输入库、头文件(因为API在动态链接库中,这些动态链接库是系统的组成部分因此不用再提供,而输入库和头文件则必须,这样才能在你的程序中使用API函数)。早期SDK是一个单独发放的包,现在在Visual C++和其他一些开发环境中已经包含了它。尽管很多同道说,SDK和VC(VS2005、VS2008等)是两套系统,但我倾向于认为SDK之于VS2008就象JAVA中JDK之于eclipse等开发工具一样,是开发工具的基础,
    (1)什么是Windows SDK?
Windows SDK是用来支持32位和64位Windows平台以及.NET框架编程模型的开发包。Windows SDK这个名字从Windows Vista开始使用,它包含以前Platform SDK中的所有内容,同时包含.NET框架的内容。
    (2)什么是Platform SDK?
Platform SDK(也简写作PSDK)是在Windows Vista之前的Windows操作系统开发包。PSDK不包含任何.NET框架编程模型的内容。现在,Windows SDK已经取代了PSDK。PSDK不会再有更新版本发布,尽管一些PSDK仍然可以在微软的网站上下载到.
    (3)Windows SDK与Platform SDK的区别?
    Windows SDK已经取代了Platform SDK。Platform SDK已经结束它的历史使命,不会再有更新。你可能因为某些原因还是要去使用老的Platform SDK。比如,你还在使用VC 6进行开发,那你就要去用2003年2月份发布的Windows Server 2003 PSDK,这是最后一个对VC 6开发提供全面支持的SDK。
6、想着,我就准备下载一个SDK安装一下试试了。从http://download.youkuaiyun.com/source/724093网址下载SDK的安装工具,安装,自动下载SDK并安装,成功。
   安装目录为C:/Program Files/Microsoft Platform SDK,windows.h赫然就在include目录中,高兴,在inclue环境变量中加入C:/Program Files/Microsoft Platform SDK/Include/crt(是windows.h中一个包含文件所需),C:/Program Files/Microsoft Platform SDK/Include在SDK安装时,选择设置环境变量就已加入到include中了。如果这时,cl编译,还会出现一个某某lib打不开的错误(呵,记不住名称了),不要紧,还是用搜索大法,会发现好几个,不过Platform SDK中没有,倒是VS2008中有一个,就将这个目录加入到lib环境变量中吧。cl编译一下,成功了!!
   在控制台中的环境变量的查看,添加可以参考文章:http://blog.youkuaiyun.com/memory_xj/archive/2008/10/27/3157187.aspx
7、至此,用Platform SDK编译成功了。但是想想也不甘心哪,必竟VS2008这样强横的系统,在控制台中竟搞不定windows.h的包含,没有天理哪!脑袋灵光一闪,在VS2008 IDE中,新建一个控制台Win32解决方案,选择空文件(没有预编译等),在源文件中新建一CPP文件,将代码拷贝至文件中。为了保险起见,我将include、lib环境变量中属于Platform SDK的删除。再生成解决方案,没有出现找不到windows.h的问题,成功!说明,VS2008完全有能力搞惦的。问题可能出现在我不知道怎样设置环境上。
8、看VS的环境变量:工具->选项->项目和解决方案->VC目录设置->显示以下内容的目录(选包含文件)。有好几个路径目录,还有VS定义的环境变量,如$(WindowsSdkDir),这个环境变量指向哪儿呢?在运行->cmd命令->set命令,完全没有这个$(WindowsSdkDir)环境变量哪,在哪儿看呢?
9、$(WindowsSdkDir)环境变量的内容要在VS2008的控制台中看,(VS2008还有专有控制台?没听说过),找找吧。在工具菜单中有一个“Visual studio 2005 command prompt”,可能这是这个,点击运行,嘿,可真出现一个控制台,用SET命令,发现$(WindowsSdkDir)就是指向哪个“C:/Program Files/Microsoft SDKs/Windows/v6.0A/Include”,等一等!!这个专用控制台在运行开始竟然执行了一个批处理文件,C:/Program Files/Microsoft Visual Studio 9.0/Common7/Tools/vsvars32.bat,在C:/Program Files/Microsoft Visual Studio 9.0/VC/bin不是也有一个vsvars32.bat。难道此bat非彼bat?
10、至此,心里明白离真相大白不远了。莫非是在cl编译执行C:/Program Files/Microsoft Visual Studio 9.0/Common7/Tools/目录中的vsvars32.bat。兴奋得小心抖抖,关掉VS2008 IDE,打开控制台,先执行C:/Program Files/Microsoft Visual Studio 9.0/Common7/Tools/vsvars32.bat,再cl task.cpp。WOW!OK!

   虽然,辛苦地转了一大圈,但真是学到很多,可知余心之欣慰!写一篇以兹纪念,呵呵!

windows.h头文件 WINDOWS.H是一个最重要的头文件,它包含了其他Windows头文件,这些头文件的某些也包含了其他头文件。 立即下载

相关推荐

C++ Windows.h

C++ windows.h头文件,DevC++里的,如果哪位没有的,可以下载,0积分。 注意,DevC++里的。

windows.h

概述 Win32程序的开头都可看到: #include <windows.h> WINDOWS.H是一个最重要的头文件,它包含了其他Windows头文件,这些头文件的某些也包含了其他头文件。这些头文件中最重要的和最基本的是: WINDEF.H 基本数据类型定义。 WINNT.H 支持Unicode的类型定义。 WINBASE.H Kernel(内核)函数。 WINUSER.H 用户界面函数。 WINGDI.H 图形设备接口函数。 这些头文件定义了Windows的所有资料型态、函数调用、资料结构和

我爱编程 2487

C++的文件 windows.h头文件

C++的文件 windows.h头文件

c++标准库windows.h文件

#include <winapifamily.h> /*++ BUILD Version: 0001 Increment this if a change has global effects Copyright (c) Microsoft Corporation. All rights reserved. Module Name: windows.h Abs...

被一个OIER遗弃的一堆烂代码 6881

windows.h 下载

main header file for the Win32 API windows.h Abstract: Master include file for Windows applications.

Windows头文件

该文件为Windows程序设计的头文件,文件中定义了在Win32程序设计中会使用到的宏,变量,结构体,API函数等等。

VS 2008 找不到“windows.h”之谜

<br /><br />解决方案一,<br />来源:http://blog.csdn.net/casablinca/archive/2008/10/30/3182184.aspx<br />1,找一个安装vs2008正常的32位XP系统, copy其安装目录下C:/Program Files/Microsoft SDKs/Windows/v6.0A/整个目录,覆盖问题电脑的相同目录;<br /><br />2,将路径 C:/Program Files/Microsoft SDKs/Windows/v6.0

Solidfish的专栏 2541

Windows_h头文件

Windows_h头文件,用于C++的windows程序开发.

QT找不到windows.h解决方法

搞C++大作业,github上扒了QT项目,跑的时候显示找不到windows.h,想着好久没用了,环境崩了,就去找解决方案。 恶心了我半天,本来以为是VS的问题,但是不是,最后还是环境变量的问题 网上全是C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include这个解决方法,但是我的Microsoft SDKs下面没有Windows这个文件夹,吐了吐了, 解决方案, 加入环境变量 D:\Windows Kits\10\Include\10.0.1

starssgo的博客 1万+

windef.h && windows.h

2个头文件 windef.h 和 windows.h,做备份,npapi有用

ArcGIS新手必看:5分钟搞定等高线转DEM栅格(附完整操作截图)

本文详细介绍了在ArcGIS中将等高线转换为DEM栅格的完整流程,包括CAD数据预处理、TIN转栅格和直接插值法两种核心方法,以及常见问题排查与优化技巧。通过实战案例和操作截图,帮助GIS新手快速掌握这一测绘数据处理的核心技能,提升地形分析和三维可视化效率。

dapp9builder的博客 286

解决 Keil 中找不到 Windows.h 头文件的问题

在进行项目开发过程中,我们常常会遇到各种技术难题。最近,在因项目需要使用意法半导体 TOF 传感器 VL53L0X 并移植其 API 时,就遇到了一个问题 ——Keil 报错找不到 Windows.h 头文件。这一问题阻碍了开发的顺利进行,不过经过一番探索,最终找到了有效的解决办法,在此分享给大家,希望能帮助到同样遇到此问题的开发者们。

lty2787496776的博客 1783

如何实现电路级别的CDM ESD防护

采用先进制程的CMOS工艺,可能具有比以前更薄的栅极氧化物和更大的芯片尺寸,大的衬底可能积累大量的电荷,导致CDM事件期间的高ESD放电峰值电流。传统CDM保护器件使用栅极接地NMOS被添加到输入级的栅极。然而,这种方法通常会在信号路径上引入显著的寄生电容,这不适合RF应用。

weixin_42693135的博客 2502

vs2022报错头文件stdio.h找不到,以及找不到Windows SDK版本

通过作者自身的这次经历,希望各位读者引以为戒,产生莫名的错误解决起来费时费力,同时也希望对各位读者朋友有帮助!!!参考解决方法转载VS2019遇见的常见错误之一及其解决办法( MSB803 找不到Windows SDK版本 10.0.18362.0.请安装所需版本的 Windows SDK,或者在项目属性页中或通过右键单击解决-优快云博客VS2022解决找不到 Windows SDK问题(编译提示一堆无命令提示符错误)_missing any windows sdk-优快云博客。

qq_42806414的博客 3341

Jetson Orin Nano GPIO 实战,用 devmem 玩转 Pinmux 引脚复用配置

devmem 是一个直接读写寄存器的工具,通过 mmap 将 /dev/mem 中的物理地址区域映射到用户空间进程地址空间,从而实现直接读写,正常情况下在 /dev 下可以看到 mem。可以看到对应 bit5 bit6 分别为 1,对应配置为 E_IO_HV 为 ENABLE 以及 E_INPUT 为 ENABLE。需要 TRM 手册查看相关寄存器,以及安装 busybox,busybox 内置了 devmem。根据 TRM 手册,找到 I2C_SDA 的 pinmux 地址偏移是 0x18。

darcsdn 1643

[亚信线上教学] AX58100: EtherCAT从站设备仿真功能设计教学

什么情况需要开启EtherCAT从站设备仿真功能呢? 一般来说, 当EtherCAT从站产品,不需要使用额外的微控制器介入,或使用不具备EtherCAT从站通讯协议栈的微控制器一同协作的情况下,就必须开启EtherCAT从站设备仿真功能,这样EtherCAT主站才能够正常设置从站设备的工作状态. 亚信AX58100 EtherCAT从站控制芯片的优点 AX58100 EtherCAT从站控制器, 集成2个百兆以太网Phis, 并支持一些额外的控制接口, 例如脉冲宽度调变, 增量, 霍尔编码器, .

allanchou1的专栏 7422

VS2008的项目出现错误“找不到windows.h”的解决办法

电脑上原本安装了VS2010,安装完成并且建项目一类的完全没有问题。 可后来又有点别的事要安装VS2008. 犹豫再三,还是先把VS2010给卸载了 貌似卸载的不干净,VS2008第一次安装失败。不想再重新安装,就直接选择了修复。 新建项目"win32 Application",提示找不到windows.h。 再修复,再新建,问题依旧。   在网上查了一些资料,

eddy_liu的专栏 1658

修改串口服务器,串口虚拟化 | 串口服务器Nport 5630 设置

原标题:串口虚拟化 | 串口服务器Nport 5630 设置JZGKCHINA项目改造,客户需要对IFix4.5进行升级,并优化通讯,在不改变原来配置的基础上逐步进行替换。需要将IFix升级到IFix5.9,数据库升级为SQL Server 2016,客户现场使用的智能仪表都是支持Modbus RTU协议的,因原来的手拉手的通讯方式的,当一台仪表掉线后,会影响到其他仪表的通讯,所以此次在不改变原有...

weixin_31688465的博客 2408

找不到windows.h源文件

找不到源文件window.h 解决方案:         右侧解决方案,选择项目-&gt;右键-&gt;属性-&gt;常规里面Windows SDK版本改成当前系统的SDK版本

lwjzjw的博客 4666

自动驾驶---Planning模块详细介绍(以Apollo为例)

主要介绍高速场景下Planning模块,至于低速的泊车场景对比高速场景或者城区场景有比较大的差距(后面也会介绍泊车场景),本篇Planning介绍主要包括三大子模块Routing,Behavioural Planning以及Motion Planining,并且对比较重要的Decider和Optimizer都做了通俗化的说明供大家思考,以便于后续理解更深入的内容,后面有时间会再开一些篇幅对这些模块进行更加深入的讲解。

智能汽车人的博客 2086

linux cma alloc fail 问题分析

摘要:日志显示CMA连续内存分配失败(错误码-ENOMEM),请求128页(512KB)内存时因CMA区域不足或内存碎片导致失败。分析发现系统CMA总内存131072KB,空闲65536KB。解决方案包括:1)手动触发内存碎片整理;2)修改设备树或内核配置增大CMA区域(如从16MB增至20MB)。通过调整CONFIG_CMA_SIZE_MBYTES或设备树中的size参数可解决该问题。

陌上花开缓缓归以的博客 797

VS2019/2022提示找不到stdio.h 找不到windows kit

以上两个问题是同一类问题 VS2019/2022提示找不到stdio.h时,一般的情况下是已经安装了C++工具集,除此之外,还需要安装一个额外的windows kit才能运行。 解决时需要下载一个新的windows kit 注意到此图是可以修改安装路径的,如果你可以修改路径的话安装上新版本windows kit就可以使用了。 如果你不能修改安装路径很有可能是电脑之前安装了老版本的windows kit 则卸载老版本时可能会删除不干净,除了常规卸载外,注册表方面可能需要手工卸载 注册表打开 计算机\HKEY

slc1112的博客 1万+

C++面试八股文

和静态多态(又称编译期多态,即在系统编译期间就可以确定程序将要执行哪个函数),其中动态多态是通过虚函数实现的,虚函数是类的成员函数,存在存储虚函数指针的表叫做虚函数表,虚函数表是一个存储类成员虚函数的指针,每个指针都指向调用它的地方,当子类调用虚函数时,就会去虚表里面找自己对应的函数指针,从而实现“谁调用、实现谁”从而实现多态。而C++符号表中的符号不是以函数名命名的,称为函数名修饰规则,虽然函数名相同,但是函数参数等其他属性不同,取的符号也不同,所以不会产生查询歧义的问题,使得函数可以重载。

qq_46676829的博客 904
上一篇: 命令行对编译环境设置及系统环境变量一览
下一篇: 水晶报表函数大全--数字函数篇
memory_xj
博客等级 码龄24年 44粉丝 23原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值