《windows链接库教程.docx》由会员分享,可在线阅读,更多相关《windows链接库教程.docx(12页珍藏版)》请在第一文库网上搜索。
1、静态链接库和动态链接库都是共享代码的方式,最主要的区别在于使用静态链接库 编译完后,静态链接库存储的指令就内嵌到可执行文件中或其他库中了,原先的静态链接库 就可以删除或移走了,而使用动态链接库编译完后,函数或类的实现依然在可执行文件或库 中,只是在编译生成的对象和动态链接库之间建立了一层联系,运行可执行文件的时候必须 还要能找到动态链接库,否则程序无法正常执行。静态链接库和动态链接库的另一个区别在于静态链接库不能在包含其他库文件,但 动态链接库可以包含其他动态链接库或静态链接库。使用库文件的好处是可以对用户隐藏代码实现;还可以使代码模块化,当需要改动 的时候,只用重新编译替换库文件就可以了,不
2、需要整个产品重新编译;对于动态库当多个 函数都要使用某个动态库的时候,内存只用加载一份就可以了,可以节省内存。windows下静态库和动态库的建立和使用IDE: VS2008一.静态库的建立建立工程项目类型(P):模板CD:.NET FramewoiVisual C+ + ATL CLR 常规 MFC 智能设备Win32 州题目 其他语言 分布式系统 其他项目类型 3W5SVisual Studio已安装的模板Win32的台硒麻当Win32项目我的模板用搜索联机模板用于创建Win32应用程序、控制台应用程序、DLL谑他静态库的项目下一步,选择静态库Win32向导-helloSta概述应用程序设
3、置应用程序设置应用程序类型:Q)Windows应用程序例) 控制台应用程序他)O DLL(R)静态库附加选项:空项目口导出符号国)囹颈编译头任)添加公共头文件以用于: ATL(A) MFC (M)I 上一步I下一步完成11痴把heIloSource. h和helIoSource. cpp文件加入到项目中嶂决方案helloSta”(1个项目)的 helloSta0匕F头文件I r alIm stdafhh* targetver.h匕源文件切 helloSource.cpp 5 StdafxxppI- 口资源文件ReadMe.txthelloSource.h(全局范围)Itatfifndef HE
4、LLOSOURCEJi2 #define HELLOSOURCEJf3 ).#include using namespace std;void ShowO ;7 l tfendifQ解决方案hell。StaF个项目)自尊 KeIIoSta匕头文件h helloSource.hIhI stdafx.h回 targetver.h心源文件ICdhelloSource.cpp的 stdafx.cpp口资源文件_j ReadMe.txt#include “stdafx.h#include hellOSQUrCe. h机;void Show()5: cout zzHello world!zz endl;T
5、 (全局范圉)工程属性-cc+-常规-附加包含目录 中加入helIoSource. h的所在目录。(C):活动(DebUg)通用属性V配置属性常规蹴7 C/C+ +常规 次预处理器粒咆含目录E:VS2008helloSourcehelloSource解析#iJSing引用调试信息做用于“锚并继续”的程序数据库(/ZI)取消显示启动标志(nologo)警告等级3 级(/W3)检测64位可移植性问题否将警告视为错误否使用UNICODE响应文件是平台(P):活动(Win32)V 配置嵌属性设置好之后,生成解决放啊,就会在工程helloSta目录下的DCbUg目录中生成一个 helloSta. Iib
6、文件,这就是要用的静态库文件。静态库文件的使用:建立hello工程,把helIoSource. h文件加到工程头文件中PJ解决方案ello”(1个项目) 白的hello 口头文件 ::LAh helloSource.ht stdafx.hl h) targetver.h;取件臼 hello.cpp5 Stdafxxpp口资源文件J ReadMe.txt(全局范围)li heii o3:一定义控制台应用程序的入口点O234!5:8: 或 oi 111 12. 13i/#include “stdafx. hinclude z/hel IoSource. h/zint)_tmain(int argc
7、,ShowO;getcharO;return 0;JrcHAR* argv)在工程属性中的附加包含目录中设置helloSource. h的目录。要使用静态库或者动态库,需要两个东西,库所在的目录和库名,有两种方法可以配 置,第一是在工程属性中配置,第二是在工程中用命令配置,只要一个生效就行,两 种方式都用也无所谓,配置目录的时候可以根据实际情况选择相对路径和绝对路径。第一种方法在工程属性中配置静态库的目录和库名字:工程属性-链接器-常规-附 加库目录中设置库路径常规蒯C/C+ +常规 舱预处理器 代玛生成 语言预编译头 城出文件 浏览信息 高级 命令行I蜻出文件I $(OutDir)$(Pro
8、jectName).exe显示进度未设置版本启用增量链接是 SNCREMENTAL)脱肖显示启动版权标志是(/NOLOGO)忽略导入库否注册喊出否每个用户的重定向否帧瞬目录EzVS28helloStaDebugt库依赖项是使用库依赖项城入否使用UNICODE响应文彳牛是工程属性-链接器-输入-附加依赖项中设置库名称hello属住页SS(C):活动(DebUg)7平台(P):活动(Win32)配置2常规 蜘 C/C+常规 优化预处理器 代码生成 语言预编译头 城出文件 浏览信息 高级 命令行 fs常规嘘入附加依敕项helloSta.lib忽略所有默认库忽略待定库 模块定义文件 将模块添加到程序集
9、 SJ售资取件 修制符号引用 延阳惨的DLL 程序集链接资源附加依赖项中可以添加库所在的目录,这样的话上一步的附加库目录就不用填写这个库的路 径了。hello属性页Sfi(C):活动(DebUg)V 平台(P):活动(Win32)常规预处理器 代码生成 语言预编译头 螭出文件 浏览信息 高级 命令行V常规 燧入帧傣赖项 忽略所有默认库 忽略特定库 模块定义文件添加到告集 读入托宫资源文件 强制符号引用 延迟的DLL 程序集质资源E:VS2008helloStaDebughelloSta.li 否第二种方法在函数体重添加库,命令:#Pragma comment (lib,)引号中填写库名称(这时
10、附加库目录需要有库的路径),或库的路径+名称。#Pragma comment (lib, ,E: VS2008helloStaDebughelloSta. lib,z) 注:分隔符要用转义字符标记转义后使用。生成解决方案,调试r I wwvppv V UJUkna IViiw jm产产解决方案hello”(1个项目)白的hello q头文件h helloSource.hM stdafx.hh targetver.hB- B源文件的 hello.cpp-切 stdafx.cpp|.口线效件一 ReadMe.txt(全局范圉) e:VS2008helloDebughello.exeHello wo
11、rld!二.动态库的建立和使用建立工程helloShr,Visual C+ +ATL CLR 常规 MFC 智能设备 tWin32 州版目 其他语言 分布式系婉 其他项目类型 W5Visual Studio已安装的模板国Win32控制台应用程序立三模板R搜索联机模板国Win32项目用于创建Win32应用程序、控制台应用程序、DLL或其他静态库的项目项目类型(P):CD:.NET Framewo名称(N):HeIIoShr(5(L):E:VS2008瞬夬方案名称(M):HeIIoShr0创建解决方案的目录(D)选择动态库,附加选项勾选导出符号应用程序设置祗述应用程序设置Win32应用程序向导-H
12、eIIoShr添加公共头文件以用于: ATL(A) MFC (M)应用程序类型:Windows应用程序(*)O控制台应用程序他) DLL(D)C)静态库)附加选项:空项目团3导出符号包)V预编译头(2)I 11完成11取消将把helioSource, h和helIoSource. cpp文件加入到项目中,动态库和静态库不同, 动态库中的函数,类,变量等多一个属性,分为导出的和内部的,导出的可供应用程 序调用,内部的只能在dll程序使用,应用程序无法调用他们。导出标记: _declspec(dl!export)。头文件中声明时:ftifdef/define HELLOSHR_API _decls
13、pec(dl1export)else/define HELLOSHR_API _deci spec (dl 1 import)endif/此类是从helIoShr. dll导出的class HELLOSHR_API ChelloShr public:ChelloShr (void);/ TODO:在此添加您的方法。); extern HELLOSHR_API int nhelloShr;HELLOSHR API int fnhelIoShr(void);cpp中定义时:include “stdafx. h/include ”hell。Shr. h/这是导出变量的一个示例 HELLOSHR_API int nhelIoShr=O;/这是导出函数的一个示例。 HELL0SHR_API int fnhel1oShr