VC工程项目配置文档格式.docx
- 文档编号:15940210
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:12
- 大小:144.51KB
VC工程项目配置文档格式.docx
《VC工程项目配置文档格式.docx》由会员分享,可在线阅读,更多相关《VC工程项目配置文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
输入->
附加依赖项:
lib库(C++的库会把函数、类的声明放在*.h中,实现放在*.cpp或*.cc中。
编译之后,*.cpp,*.cc,*.c会被打包成一个.lib文件,这样可以保护源代码)
常见问题:
1.包含目录和附加包含目录(库目录和附加库目录)的区别:
修改了系统的include宏的值,是全局的;
用于当前项目,对其他项目没有影响。
(库目录和附加库目录的区别同上)
2.可知包含目录和附加包含目录(库目录和附加库目录)的区别主要在于全局还是当前,那么当需要对某工程添加这些目录时,通常情况下,都是在附加包含目录和附加库目录中添加的。
3.要使用一个库,除了要include其头文件以外(附加包含目录),还要在链接过程中把lib加进去(附加库目录、附加依赖项)。
4.添加方法:
附加包含目录---添加工程的头文件目录:
项目->
配置属性->
C/C++->
常规->
加上头文件的存放目录;
附加库目录---添加文件引用的lib静态库路径:
链接器->
加上lib文件的存放目录;
附加依赖项---添加工程引用的lib文件名:
输入->
加上lib文件名。
5.当需要向项目中添加.dll动态链接库时,直接将需要添加的.dll文件拖拽到项目生成的.exe所在的文件夹下即可(项目->
输出目录,可以看到.exe生成在哪个目录下)。
6.在添加上述几个目录的路径的时候,可以看到$(xxxx),这就是宏了,可以点开右下角的宏查看这些分别代表什么字符串。
二、lib和dll的区别、生成以及使用详解
首先介绍一下静态库(静态链接库)、动态库(动态链接库)的概念,首先两者都是代码共享的方式。
静态库:
在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;
缺点就是被多次使用就会有多份冗余拷贝。
即静态库中的指令都全部被直接包含在最终生成的EXE文件中了。
在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件
动态库:
动态链接库是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。
动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。
函数的可执行代码位于一个DLL中,该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。
在vs中新建生成动态库的工程,编译成功后,产生一个.lib文件和一个.dll文件
那么上述静态库和动态库中的lib有什么区别呢?
静态库中的lib:
该LIB包含函数代码本身(即包括函数的索引,也包括实现),在编译时直接将代码加入程序当中
动态库中的lib:
该LIB包含了函数所在的DLL文件和文件中函数位置的信息(索引),函数实现代码由运行时加载在进程空间中的DLL提供
总之,lib是编译时用到的,dll是运行时用到的。
如果要完成源代码的编译,只需要lib;
如果要使动态链接的程序运行起来,只需要dll。
以下例子均在vs2010上测试
生成和使用动态库
生成动态库
新建项目--win32项目--填写项目名--确定--下一步--应用程序类型:
选择dll--附加选项:
选择导出符号--完成
可以看到生成了一个dllmain.cpp文件,这是dll应用程序的入口,注意它和普通工程的入口main函数不同,这个文件我们不需要修改。
在这个动态库中我们举例导出一个变量,一个类,一个函数,头文件dll.h如下:
1//新建生成dll的工程时,vs默认定义了宏DLL_EXPORT,因此,DLL_API是__declspec(dllexport),用来导出
2//当我们在静态调用dll时,我们包含该头文件,由于没有定义DLL_EXPORT,所以DLL_API是
3//__declspec(dllimport),用来导入
4#ifdefDLL_EXPORTS
5#defineDLL_API__declspec(dllexport)
6#else
7#defineDLL_API__declspec(dllimport)
8#endif
9
10//导出类
11classDLL_APICdll{
12public:
13Cdll(void);
14//TODO:
在此添加您的方法。
15};
16
17//导出变量,变量在.cpp文件中定义
18externDLL_APIintndll;
19
20//导出函数,加extern"
C"
是为了保证编译时生成的函数名不变,这样动态调用dll时才能
21//正确获取函数的地址
22extern"
DLL_APIintfndll(void);
dll.cpp文件如下:
1#include"
dll.h"
2
3
4//这是导出变量的一个示例
5DLL_APIintndll=6;
6
7//这是导出函数的一个示例。
8DLL_APIintfndll(void)
9{
10return42;
11}
12
13//这是已导出类的构造函数。
14//有关类定义的信息,请参阅dll.h
15Cdll:
:
Cdll()
16{
17return;
18}
调用动态库
有两种方法调用动态库,一种隐式链接,一种显示链接。
调用动态库:
隐式链接
隐式链接需要.h文件,dll文件,lib文件
(1)将dll放到工程的工作目录
(2)设置项目属性--vc++目录--库目录为lib所在的路径
(3)将lib添加到项目属性--链接器--输入--附加依赖项(或者直接在源代码中加入#pragmacomment(lib,“**.lib”))
(4)在源文件中添加.h头文件
然后就像平常一样调用普通函数、类、变量
显示链接
显示链接只需要.dll文件,但是这种调用方式不能调用dll中的变量或者类(其实可以调用类,但是相当麻烦,有兴趣者可参考
显示调用主要使用WIN32API函数LoadLibrary、GetProcAddress,举例如下:
1typedefint(*dllfun)(void);
//定义指向dll中函数的函数指针
2HINSTANCEhlib=LoadLibrary("
.\\dll.dll"
);
3if(!
hlib)
4{
5std:
cout<
<
"
loaddllerror\n"
;
6return-1;
7}
8dllfunfun=(dllfun)GetProcAddress(hlib,"
fndll"
9if(!
fun)
10{
11std:
loadfunerror\n"
12return-1;
13}
14fun();
生成和使用静态库
生成静态库
选择静态库
静态库项目没有main函数,也没有像dll项目中的dllmain。
创建项目后添加.h文件,添加相应的导出函数、变量或类,如下所示
1#ifndef_MYLIB_H_
2#define_MYLIB_H_
4voidfun(inta);
5
6externintk;
7
8classtestclass
10public:
11testclass();
12voidprint();
13};
14
15#endif
.cpp文件如下
stdafx.h"
2#include"
lib.h"
3#include<
iostream>
4
5voidfun(inta)
6{
7std:
a<
libgen\n"
8}
10intk=222;
11
12testclass:
testclass()
13{
14std:
123\n"
15}
17voidtestclass:
print()
18{
19std:
thisistestcalss\n"
20}
编译工程后就会生成一个.lib文件
使用静态库
需要.h文件,lib文件
(1)设置项目属性--vc++目录--库目录为lib所在的路径
(2)将lib添加到项目属性--链接器--输入--附加依赖项(或者直接在源代码中加入#pragmacomment(lib,“**.lib”))
(3)在源文件中添加.h头文件
然后就像平常一样调用普通函数、类、变量,举例如下:
1#include<
4#pragmacomment(lib,"
lib.lib"
)
6intmain()
7{
8fun(4);
9std:
k<
std:
endl;
10testclasstc;
11tc.print();
12return0;
【版权声明】转载请注明出处
三、字符集设置
VC真是一个非常笨,非常不友好的工具,还是这样说,VC(MFC)和现在流行的。
netframeworkjava比起来就想石器时代跟工业时代相比一样!
接触MFC也有几年了,为了它有过加班、有过熬夜、甚至通宵,代码没有十万行也应该有几万行了。
但是MFC就是这么牛,它牛得不但令新手忘而却步,而且常常令有经验的软件工程师也栽跟斗。
最近由于一个小小的环境设置设置问题花了很多时间,这跟用惯了VC6突然转到VC2005有关,但关键还是VC实在太笨了,它让我在一周内连续两中招次!
第一次中招是这样的,很简单:
我不知道VC.net2005默认工程默认设置是采用“Unicode字符集”(UnicodeCharacterSet)的,以前用VC6工程的时候默认是“多字符集”(Multi-ByteCharacterSet)的。
以前也没有用过VC.net2005啊,我一直认为。
net是用来在framework上面编程的,在MFC上编程没有必要打开庞大的。
net2005,把机器弄得像牛拉
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 工程项目 配置