dll的封装和使用
背景
在windows平台下,要实现函数的封装,一般采用的是dll动态库的形式
实现了函数的封装就意味着实现过程的隐藏
可以实现跨平台和跨语言的使用
实施步骤
生成dll动态库
- 在VS中生成新项目,应用类型选择DLL
- 新建文件(由于生成的都为CPP文件,此时也新建CPP文件)
- 编写代码,实现函数,编译生成dll动态库
extern "C" //extern "C"指定使用C语言的方式编译,不加入这句话的话,无法在C语言中调用
{
__declspec(dllexport)
//函数实现
__declspec(dllexport)
//函数实现
}
使用dll动态库
第一种方法:
- 将生成的dll动态库复制到项目所在可执行程序目录下
- 将生成的
.lib
文件复制到项目源文件目录下 - 在使用前载入文件(在头文件中声明)
#ifndef __DLLNAME_H
#define __DLLNAME_H
#pragma comment(lib, "dllname.dll")
//加入函数声明
#endif
- 载入头文件
第二种方法:
- 将生成的dll动态库和lib文件复制到
.c
文件同级目录 - 在属性,连接器,输入中添加依赖项,输入lib名
- 载入头文件
dll调用原理
dll没有主函数,无法直接运行
exe在运行的时候,可以调用dll,将其加载到所属内存中执行
exe只是调用dll的功能
动态库与静态库的区别
动态库在编译时独立,运行时加载。可以只改变动态库,而不改变可执行程序。同时,动态库中的代码与位置无关
静态库在编译时候编入可执行文件。
dll的封装和使用的更多相关文章
- 在DLL中封装的VCL窗体Tab键响应的问题
在DLL中的子窗体不会响应Tab按键的,这个时候就需要手动去指定Tab键的操作,但是前提是主窗体要向这个窗体发送一个消息,一个Tab键按下的消息.基本顺序是这样的: 1. 主窗体用Hook技术捕获Ta ...
- ffdshow 源代码分析 6: 对解码器的dll的封装(libavcodec)
===================================================== ffdshow源代码分析系列文章列表: ffdshow 源代码分析 1: 整体结构 ffds ...
- MFC DLL 可以封装MFC的窗体 供别的MFC程序使用
MFC DLL 可以封装MFC的窗体 供别的MFC程序使用 在庞大程序分工里面 非常可取. 可以细分每个窗体就是单独的 模块. [后续不断完善]
- 用DLL方式封装MDI子窗体
用DLL方式封装MDI子窗体是一种常用的软件研发技术,他的长处: 研发人员能够负责某一个模块的编写包括(界面+逻辑),能够互不干扰,模块研发完成后,主程式统一调用. 易于程式升级,当程式升级时,不用编 ...
- 五,动态库(dll)的封装与使用
在项目开发中,我们经常会使用到动态库(dll),要么是使用别人的动态库,要么是将功能函数封装为动态库给别人用.那么如何封装和使用动态库呢?以下内容为你讲解. 1.动态库的封装 以vs2010为例,我们 ...
- Win32 DLL和MFC DLL 中封装对话框
现在最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题.这里我们从Win32 DLL和MFC DLL两个方面来分析并解决这个问题. ...
- Delphi 中的DLL 封装和调用对象技术(刘艺,有截图)
Delphi 中的DLL 封装和调用对象技术本文刊登2003 年10 月份出版的Dr.Dobb's 软件研发第3 期刘 艺摘 要DLL 是一种应用最为广泛的动态链接技术但是由于在DLL 中封装和调用对 ...
- ASP 调用dll(VB)及封装dll实例
ASP调用dll及封装dll实例,封装为dll可以提供运行效率,加密代码. 打开VB6,新建ActiveX DLL 2.在工程引用中加入Microsoft Active Server Pages Ob ...
- 享受一下大神的感觉, unity中用C#自己封装dll
第一次写博客,有什么不对的地方,欢迎大家指出 (1)打开vs(本人用的是vs2013)然后建一个项目,如下图所示,选择.ENT3.5的框架,或者低于3.5的,这是因为Unity里面用的框架可能在3.5 ...
随机推荐
- apache log4j将日志保存在mongodb数据库中(转)
og4j与mongodb整合 Mongo Java driver jar包 log4mongo-java jar包 配置log4j.properties文件,使之整合mongodb: #将Mongod ...
- 【agc004e】Salvage Robots
题目大意 一个n*m的矩阵,矩阵内有一个出口和若干个机器人,每一步操作可以使所有的机器人向任意方向移动一格,如果机器人出了边界就爆炸.求最多可以让多少个机器人走到出口. 解题思路 发现,移动所有机器人 ...
- 移动端rem使用及理解
先上代码 window.onload = function(){ getRem(720,100) }; window.onresize = function(){ getRem(720,100) }; ...
- jquery selected选择器 语法
jquery selected选择器 语法 作用::selected 选择器选取被选择的 <option> 元素.直线电机生产厂家 语法:$(":selected") ...
- Java多态性详解——父类引用子类对象
来源:http://blog.csdn.net/hikvision_java_gyh/article/details/8957456 面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实 ...
- SRS之SrsServer::cycle()
1. SrsServer 相关类定义 1.1 SrsServer 类定义 /** * SRS RTMP server, initialize and listen, * start connectio ...
- PHP 分页 (分页类)
分页类 以后可直接使用 /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 private ...
- 没有安装zip引发的一系列安装
安装一个php框架的时候提示不能在线解压缩 通过phpinfo查看没有加载zip扩展,安装开始. 先安装了一次发现不能make,,,什么情况!!! 提示这个错误,好吧解决.make: *** No t ...
- modprobe 和 insmod 区别
1 关于内核加载方式 1) insmod : insmod一次只能加载特定的一个设备驱动,且需要驱动的具体地址 举例说明: insmod pblk.ko // 需要制定pbl ...
- 能否保证service不被杀死?
Service设置成START_STICKY kill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样 提升service优先级 在AndroidManifest.xml文件中对于in ...