因为我建立TDWZDev工程是按照DriverDemo建立的,因此是预处理常量没有按照DriverDemo定义的值重新复制的原因。
在C++中,#include 设施是C++预处理器的一部分。预处理器处理程序的源代码,在编译器之前运行。预处理器用指定的头文件的内容替代每个#include。为了避免多重包含常见的方式是定义预处理器变量。
预处理器变量有已定义和未定义两种状态。可以使用这种设施来预防多次包含头一个文件。
#ifndef SALESITEM_H
#define SALESITEM_H
// Definition of Sales_item class and related functions goes here
#endif.
通过这种形式避免多重包含。
DriverDemo的预处理器常量集合如下图:右击属性-->C/C++-->预处理器。然后把预处理器定义中的值拷贝到TDWZDev的对应位置。
头文件包含步骤:
在程序编写的过程中,需要包含头文件名,我们知道#include设施在导入自定义的头文件时,要用#include"头文件名"。“”表明我们引用的是程序目录的相对路径中的头文件,当前路径是VC工程中工程文件所在的路径,
其实这里的相对路径就是相当于工程文件(XXXX.vcproj)为起点零计算出的能找到包含所需头文件(也就是找包含所需头文件的include目录)的路径。
可以找到TDWZ工程的的起点路径为D:\插件协议\DriverDemo\vs2008\TDWZDev。因为TDWZDev.vcproj在这个目录下。然后我们导入本地的头文件时,因为处于编译阶段,所以要在下面的位置添加附加库目录。
可以看到上图红线方框出即为添加的附加包含目录,这样我们在程序代码中导入了#include"writer.h",vs2008会以此遍历附加包含目录,直到找到writer.h。在D:\插件协议\DriverDemo\include\json。退出两次进入include\json。因此添加的附加库目录为..\..\include\json
第二个问题:
1>正在链接...
1>LINK : fatal error LNK1181: 无法打开输入文件“hlog.lib”
该lib文件找不到处于链接状态,因此要修改的不是C/C++编译阶段,而是链接器的配置。对应如下的2.
一、只对当前工程起作用的设置
1. 设置头文件包含路径
工程上右击,选择“属性”,打开工作属性页
“配置属性”-->“常规”-->“附加包含目录”
2. 设置lib文件包含路径
工程上右击,选择“属性”,打开工作属性页
A“配置属性”-->“连接器”-->“常规”-->“附加库目录”,
注意这只是添加了目录而已
B“配置属性”-->“连接器”-->“输入”-->“附加依赖项”,
这里指定了本工程要链接的库,等同于#pragma comment(lib, "xx.lib")
3. 设置DLL文件包含路径
这个实际上要设置PATH变量,工程上右击,选择“属性”,打开工作属性页
“配置属性”-->“调试”-->“环境”,右其中输入PATH=<DLL路径>
这样运行时就可以找到DLL,不用将DLL拷贝到exe目录下
因此解决方式是先为TDWZ在连接器中常规添加hlog.lib所在的目录作为附加库目录。然后添加hlog.lib添加到链接器的输入-->附加依赖项。这样就能找到hlog.lib了。
二、对所有工程起作用的配置
1. 设置头文件包含路径
菜单“工具”-->“选项”
“项目和解决方案”-->“VC++目录”中“包含文件”中指定.h目录
2. 设置lib文件包含路径
菜单“工具”-->“选项”
“项目和解决方案”-->“VC++目录”中“库文件”中指定.lib目录
晚上从海康威视回到宿舍的时候已经十点了,然后冲洗了一下,开始阅读《C++ Premier》里的标准IO库章节,环境非常好,内心也很宁静,所以一口气就看完了,看完已经24:00了,一共看了1小时35分钟的C++ Premier