温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(382)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_095',
blogTitle:'\t\t文件后缀只多少!2',
blogAbstract:'----- J -------J62 Ricoh照相机格式 JAR Java档案文件(一种用于applet和相关文件的压缩文件) J***A Java源文件 JBF Paint Shop Pro图像浏览文件 JFF,JFIF,JIF JPEG文件 JMP SAS的JMPDiscovery表格统计文件 JN1 Epic MegaGames的Jill of the Jungle数据文件 JPE,JPEG,JPG JPEG图形文件 JS javascript源文件 JSP HTML网页,其中包含有对一个Java servlet的参考 JTF JPEG位图文件----- K -------',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:6,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}怎样编写自己的DLL库文件? - 推酷
怎样编写自己的DLL库文件?
转载请声明出处!!!谢谢!!!
经常我们需要利用我们以前编写某些程序里面的某些函数,但是我们总不能每次都把原来文件打开然后复制粘贴吧,太麻烦了,有人想到了一些暴力的方法,如果那个文件只是一个实现函数的功能的文件,没有主函数的话,就
,然后编译相当暴力。明显这样会急剧增大我们最终生成的
文件大小。所以我们就要自已写一个库,以后需要的时候然后调用就行了。现在我们就来讨论怎样编写自己的库。
在开始之前先弄明白几个概念:动态链接库、动态链接库、动态链接、静态链接。
静态链接库
通俗说就是不管现在需不需要在生成可执行文件的时候全部编译进去。不管暂时能不能用到,先拿来再说,
明显这样生成的可执行文件会很大。
这是静态链接库致命的缺点,因为很多软件虽然对大小没有要求但是过分的冗余是让人无法接受的。但是这也是产生静态链接库优点的原因,
动态链接库
与静态链接库相反,动态连接库就是在需要的时候才调用。因此动态链接库显得简洁方便,但是产生了&
的问题。什么是
呢?简单的比喻一下。我喜欢吃包子,静态链接库相当于与,为了吃包子我在自己家里开了家包子店,虽然目前不吃,但是想吃的时候就会有,不会产生别人跟我抢包子的现象。动态链接库相当于我家门口开了家包子店,这个包子店不是我家的,每次想吃包子才去包子店,因此节省了我家的地方,但是会产生别人跟我竞争包子的显现,同时今天卖的包子不一定符合我的口味(相当于
版本不对),更主要的是包子是别人做的啊,安全问题咋办?谁对我有仇包子里面下毒怎么办?因此动态链接库是有一定的风险的。
静态链接和动态链接是动态链接库实现的两种方法。静态链接就是直接在程序运行前将需要的运行库包含进来,就跟
一样,是原地展开。
在程序运行前检查这些库,如果某个库不存在,程序无法运行。
动态链接是在程序运行的时候需要了才去加载。例如我有个读取数据库的函数做成了
,只有当我点击了查找按钮之后,才会加载这个库然后实现某些功能,如果这个库不存在,紧紧是某些功能无法实现,对程序其他功能没有影响。
&&&了解了几个概念之后,开始介绍怎样编写和应用
新建工程,选择
选项。工程名为:
2、选择一个简单的工程,点击完成。
3、为做简单演示,实现一个两个数相加功能的函数。打开
文件,添加如下代码
&&&&&&return&a+b;
不必关心,照写就行。其实这是声明了后面那个
函数是符合
语言规范的一个
调用接口。后面那个函数就是自己定义的函数。添加之后如下图
、点击组建
全部组建就行。
&&&&&现在我们的
问价就做好了,在工程的
文件夹下面我们发现生成了对应的
文件。怎样使用呢?
一、静态加载
很多人编程序都喜欢在程序中静态加载
提供的一些库,我们自己生成的库调用方式是一样的。只需添加添加如下代码即可
#pragma&comment(lib,&MyFirstDll.lib&)
extern&&C&&_declspec(dllexport)&int&add(int&i1,int&i2);
效果如下:
执行结果如下:
注意:要将我们生成的
文件拷贝到我们当前工程下,不然是无法运行的。
二、动态加载
动态链接的实现方法相当于指针的用法,开始定义一个函数指针,然后找到我们需要的
文件,然后加载,找到我们需要的函数,将该函数的地址传递给我们定义的函数指针,然后使用我们的函数指针进行操作。函数指针定义如下:
typedef&int(_cdecl*&FunctionAdd)(int,int);
动态加载在需要的时候才加载,采用询问方式进行模拟,询问用户是否加载
,当用户输入
文件然后执行。实现如下
执行效果如下图:
这样我们自己的
文件就使用成功了!!!
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致