vs使用Lib和dll各种设计方案.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VS的Lib和DLL的学习整理 我们在用VS开发C++项目中经常要用到自己或别人开发的lib。很多初学者对lib和dll的意义大概都了解的,但是由于我们的vs的IED允许有各种配置和使用方式,每一种方案都有其对应的意义,但对一些初学者往往会带来混肴,而且网络上的资料都是片面的和碎片化的,对于初学者的学习会代理很多不方便。解决混肴的最佳方法,就是把他们摆到一起来,通过对比来加深理解,克服混肴。 下面总结了六种方法,用实际例子一一验证。 本文主要分为lib的三种使用方式和dll的三种使用方式。 libVS配置方式。 lib显示调用:代码方式。 本地开发lib的使用。 Dll 加载时动态链接。 Dll运行时动态链接。 Def文件的使用。 Lib库 ib的使用原理就是头文件加lib。头文件告诉你程序中能调用那些接口,lib实现这些接口。 首先,我们用第三方库Luajit来 验证各种方法。备注:LuaJit 即c语言写的lua代码解释器,会编译到你自己的程序中。 准备: 1.首先下载LuaJit,解压后目录如下图: 找了一下各个文件夹,没有看到文件,查了下说明文档,需要自己编译一下。 2.找到vs的命令行编辑器,然后到src目录下编译一下, 安装下面的指令执行一下: 执行成功后,会生成下面四个新文件。 下面就可以开始使用此lib里。 先新建一个控制台应用程序的项目用于实战。 方法一:配置 1.配置 头文件的目录配置: 2.lib的目录配置: 指明lib目录中要用到的那个具体lib: 此时,就配置好了,下面就来写例子代码: 执行后的结果: 方法二;显式调用 1.配置头文件:如方法一 2.去掉lib的配置: 上面的步骤中input配置去掉,改成下面的语句。效果是一样的。 #pragma comment (lib,Lua51.lib) 3.执行后效果和方法相同: 方法三:本地lib的使用 本地lib是兼容以上两个方法的,但是vs提供了第三个方便的方法。 1.新建一个lib项目 编辑简单的代码: 头文件 具体执行,我们只是输出简单的字符串: 编译后生成的是lib文件,其实此时不需要专门编译: 上面编译好的lib可以用以上两种方式来使用,但是我用vs提供的第三种方式来实现: 2.在测试项目中添加一下依赖: 头文件还是要导入的,由于项目在本地解决方案中,所有直接导入头文件,不用配置了: 执行结果: 三种lib方式比较一下: 方法一:纯配置,单纯好管理 方法二:比较凌乱,一会配置,一会要写代码不推荐。 方法三:自己写的lib放到同一个解决方案中才可以使用,假如是第三方库则无法使用。 总结:不管哪个方案,头文件目录是必须的,毕竟代码中要显示的调用接口名字的。 另外对于vs配置的一些比较容易混肴的地方我们列举比较一下: 1. Include Directories :用于全局的,所有解决方案所有项目都可以使用,等于给系统配置的。 2.Additional Include Directories:用于本项目的,添加额外的你要搜索的包含头文件的“include”目录 是针对头文件的。比较单纯,推荐用这个。 3. Additional Library directories:添加额外的你要搜索的包含库文件(即.lib)的目录。减少代码调用的路径编写,相当于 #pragma comment (lib,xx/xx/xx/xx/Lua51.lib)。 4. Additional dependencies:清楚地列出你要添加的.lib文件。其实就是代替#pragma comment (lib,Lua51.lib)。 DLL库 DLL 是动态的 用法其实和lib是一样的,唯一不同的是,dell是随应用程序带出去的,可以随时更新,不用编译到应用程序中。 方法一:加载时动态链接(需要.lib 和.dll和头文件) 1.新建dll项目: 2.函数声明要带上关键字__declspec(dllexport):声明导出函数、类、对象等供外面调用: 测试一下,下面是不带__declspec(dllexport)关键字的,生成的没有lib文件: 带上关键字后的生成文件: 3.导入项目的方式和上面的lib一样,头文件的目录和对应的库目录 备注:附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件。如果要完成源代码的编译和链接,有头文件和lib就够了。 原理:程序中引用了一个H文件里的函数,编链器怎么知道该调用哪个DLL文件呢?这就是LIB文件的作用: 告诉链接器 调用的函数在哪个DLL中,函数执行代码在DLL中的什么位置,这也就是为什么需要附加依赖项 .LIB文件,它起到桥梁的作用。如果生成静态库文件,则没有DLL ,只有lib,这时函数可执行代码部分也在lib文

文档评论(0)

gl5000 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档