当前位置: 首页 > news >正文

苏州360推广网站建设广州网络推广公司有哪些

苏州360推广网站建设,广州网络推广公司有哪些,qq空间做网站,WordPress自学建网站下面我们将用两种不同的姿势来用VS2017生成dll文件#xff08;动态库文件#xff09;和lib文件#xff08;静态库文件#xff09;#xff0c;这里以C语言为例#xff0c;用最简单的例子#xff0c;来让读者了解如何生成dll文件#xff08;动态库文件#xff09; 生成动…下面我们将用两种不同的姿势来用VS2017生成dll文件动态库文件和lib文件静态库文件这里以C语言为例用最简单的例子来让读者了解如何生成dll文件动态库文件   生成动态库文件 姿势一 第一步新建一个项目   第二步选择Windows桌面向导这里先不要去管上面的“动态链接库(DLL)”    第三步选择动态链接库并空项目打勾√    第四步添加一个.c源文件   第五步因为这里以C语言为例子将后缀改为.c   第六步在c文件中输入一个简单的函数这里使用了_declspec(dllexport)但_declspec(dllexport)并不是必须的后面一种方法将不使用_declspec(dllexport) _declspec(dllexport) int sum(int a, int b) {return a b; }   第七步新建一个头文件    第八步在头文件中输入函数的声明   第九步编译   第十步Debug文件夹下的两个文件DLL.dll和DLL.lib就是我们要使用的两个文件了 因为使用的_declspec(dllexport)虽然这里我们只编译了一次却生成了dll和lib两个文件     姿势二   第一步到第五步和上面的步骤一模一样这里从第六步开始讲起   第六步在c文件中输入一个简单的函数注意这里就没有使用_declspec(dllexport)   第七步添加一个头文件   第八步在头文件中输入函数的声明   第九步编译   第十步这时在Debug文件里就可以看出两种方法的区别了第二种方法没有加 _declspec(dllexport) 只有一个dll文件如果我们也想要lib文件需要额外几个步骤   生成lib文件   第十一步点击项目——》DLL属性   第十二步配置属性——》项目默认值——》配置类型把动态库(.dll) 改为 静态库(.lib)   第十三步编译   第十四步这个时候Debug文件夹里面就多出了一个lib文件 从上面两个例子可以看出 在生成dll文件动态库文件时如果不使用_declspec(dllexport)那么就只有dll文件在这种情况下就无法使用#pragma comment来隐式装载动态库因为需要lib文件只能使用LoadLibrary来显式装载动态库使用Loadlibrary只需要dll文件 如果使用了_declspec(dllexport)那么就既有dll文件也有lib文件   还有一点需要注意的是如果在源文件.c文件中函数的定义没有_declspec(dllexport)但是在头文件中函数的声明使用了_declspec(dllexport)此时编译产生的文件只有dll文件如果改成源文件中有_declspec(dllexport)头文件中没有_declspec(dllexport)那么编译产生的文件既有dll文件也有lib文件 导出dll文件时最好还是在源文件和头文件中都加上_declspec(dllexport) 笔者记录了一下加与不加_declspec(dllexport)对导出dll文件大小的影响以上面的代码为例 造成dll文件大小不同的原因笔者暂时无法给出解释待补充     生成静态库文件   和生成dll文件步骤相似这里就不再赘述了直接上图 第一步   第二步建议把预编译标头的勾去掉不去掉也没事只是本文为了简洁让读者更清楚的生成步骤   第三步   第四步   第五步 在源文件中输入以下代码 int sum(int a, int b) {return a b; }   第六步   第七步   第八步   第九步编译可以看到Debug文件夹下有一个lib文件   注意不要像我一样傻fufu的在导出lib文件的时候还加上_declspec(dllexport)之前我的确这么干过如果加了_declspec(dllexport)在Debug文件夹里面也只有lib文件lib文件也能正常使用 但是不建议加 还有一点就是生成dll文件动态库文件时产生的lib文件和生成lib文件静态库文件时产生的lib文件的作用不相同从文件大小也能看出来一个1.58KB一个3.92B 关于lib和dll文件的区别可以看一下这一盘文章lib 和 dll 的区别、生成以及使用详解    笔者记录了一下加与不加_declspec(dllexport)对导出lib文件大小的影响以上面的代码为例 至于为什么加了_declspec(dllexport)后lib文件会出现0.02KB的差别笔者暂时无法给出解释待补充   有的读者可能会发现在网上很多博客写关于生成dll文件时头文件里面的写法是这样的   刚接触预处理命令的读者看着可能会有点不好理解下面对上面的头文件中的代码逐个分析笔者将上面的代码分为两个个部分对预处理命令不是很熟悉的读者可以先看一下这一篇随笔 预处理命令使用详解----#if、#endif、#undef、#ifdef、#else、#elif 第一部分 #pragma once #ifdef DLL_EXPORTS #define DLL _declspec(dllexport)#else #define DLL _declspec(dllimport)#endif 把上面的代码翻译一下就是如果DLL_EXPORTS这个宏名已经被定义那么DLL就等价于_declpsec(dllexport)否者DLL就等价于_declspec(dllimport),#pragma once保证了该头文件只被包括#include一次 在很多头文件中都可以看到#pragma once比如stdio.h 读者这个时候可能就有疑问了明明我没有#define DLL_EXPORTS为什么是执行#define DLL _declspec(dllexport)而不是#define DLL _declspec(dllimport)呢 首先读者需要知道的是DLL_EXPORTS是一个预定义的宏因为我们是生成的是DLL文件 可以在属性-配置属性-C/C-预处理器中看到 现在读者应该清楚了在生成DLL文件时编译器已经预定义了DLL_EXPORTS这个宏名如果我们是生成的应用程序 上面的代码写成 #ifdef#else#endif 这种形式是为了方便在使用的时候lib或者dl文件时需要引入头文件的时候方便一点不需要对头文件做任何的修改因为如果我们使用的配置类型是“应用程序(.exe)”那么就没有预定义DLL_EXPORTS   第二部分 #ifdef _cplusplus extern C { #endifDLL int sum(int a, int b); #ifdef _cplusplus } #endif 把上面的代码翻译一下就是如果是C文件.cpp后缀那么就是 extern C {DLL int sum(int a, int b); } 如果不是C文件那么就是 DLL int sum(int a, int b); 关于extern C作用可以看一下这篇文章深入理解C/C混合编程关于#ifdef __cplusplus extern C {...}的用法   总结一下 生成动态库文件   头文件 1 #pragma once2 #ifdef DLL_EXPORTS3 #define DLL _declspec(dllexport)4 5 #else6 #define DLL _declspec(dllimport)7 8 #endif9 10 #ifdef _cplusplus 11 extern C 12 { 13 #endif 14 DLL int sum(int a, int b); 15 #ifdef _cplusplus 16 } 17 #endif   源文件 1 _declspec(dllexport) int sum(int a, int b) 2 { 3 return a b; 4 }   编译之后产生   生成静态库文件   头文件 1 #pragma once2 3 #ifdef _cplusplus4 extern C5 {6 #endif7 int sum(int a, int b);8 #ifdef _cplusplus9 } 10 #endif   源文件 1 int sum(int a, int b) 2 { 3 return a b; 4 }   编译后产生   到这里本文就基本结束了上面详细叙述了生成dll文件动态库文件和lib文件静态库文件的步骤关于lib文件和dll文件的使用将在另一篇随笔中详细介绍转载于:https://www.cnblogs.com/lanhaicode/p/10798385.html
http://www.pierceye.com/news/146821/

相关文章:

  • 网站站内搜索怎么做seo搜索优化
  • 建设部网站 测绘规章pc网站手机网站
  • 建网站如何赚钱vs哪个版本做网站好
  • 新衡阳网站游戏软件开发公司简介
  • 湖南基础建设投资集团网站做体育最好的网站
  • 上海php网站开发公司wordpress 邮件认证
  • 教做香肠的网站张家港专业网站建设
  • 园林建设网站营销型网站的建站步骤是什么意思
  • 招聘求职网站html模板正规的创业商机网
  • 预付网站建设费会计处理哪里建网站好
  • 做免费网站艺术学院网站建设管理办法
  • 做网站贵吗手机网站wap
  • linux建立网站做网站的应该怎么发广告
  • wordpress使用端口百度seo排名软
  • 用英文字母做网站关键词个人网站的设计与实现专业论文图像处理工具
  • 重庆企业网站推广流程php网站开发技术训练心得
  • 汽车销售网站学校建网站
  • 两台电脑一台做服务器 网站潍坊专业网站建设多少钱
  • 青岛科技街网站建设安徽 网站开发
  • 黑糖不苦建设的网站wordpress获取文章图片不显示
  • 美食网站建设的功能免费做简历的网站
  • 网站建设公司谁管手机如何创建网站
  • 可以自己做网站优化吗最好用的wordpress主题
  • 瓜子二手车网站开发智慧团建注册登记入口
  • 青岛网站开发建设安阳市商祺网络有限责任公司
  • 自己怎么做装修网站网站建设设计岗位职责
  • php语言 网站建设投资2 3万小生意
  • 全美网站开发微转app是用网站做的吗
  • 禹州 什么团购网站做的好广州网站建设程序开发
  • 成都市微信网站建设公司专业app开发