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 ...
随机推荐
- linux运维、架构之路-K8s数据管理
一.Volume介绍 容器和Pod是短暂的,它们的生命周期可能很短,会被频繁的销毁和创建,存在容器中的数据会被清除,为了持久化保存容器的数据,k8s提供了Volume.Volume的生命周期独立于容器 ...
- React组件(组件属性this.state和this.props,css样式修饰组件)
目录: 1.创建组件的第一种方式 function2.将组件抽离为单独的jsx文件3.省略.jsx后缀, 配置webpack设置根目录4.创建组件的第二种方式--使用class关键字创建组件5.组件私 ...
- mysql 导出导入数据库(Mysqldump)备份
使用mysql不熟练啊!!! mysqldump导出数据库,必须以cmd命令行的形式,在Navicat中以新建查询形式使用Mysqldump不好使的.(本来使用Navicat转储SQL,再导入SQL, ...
- C语言中的位域[转]
有些信息在存储时,并不需要占用一个完整的字节,而只需要一个或几个二进制位即可;比如:在存放一个开关量时,只有0和1两种状态,只需要使用一个二进制位即可存储;为了节省存储空间,C语言提供了一种数据结构, ...
- 编写批处理使用msbuild编译项目
echo off ::请把此bat脚本放到以下代码路径下 并在环境变量中配置对应版本的vs编译器的值 ::vs2017如:C:\Program Files (x86)\Microsoft Visual ...
- CentOS7下安装mysql5.1 或升级到5.7 以及小问题的解决方案
正文开始 1.首先打开终端输入以下内容下载mysql5.1的repo源(安装5.7从第二步执行) wget http://repo.mysql.com/mysql-community-release ...
- nagios监控部署
nagios监控部署. 在部署之前把依赖包安装了. [root@tiandong63 ~]# yum install -y gcc glibc glibc-common php gd gd-devel ...
- TCP层accept系统调用的实现分析
inet_csk_accept函数实现了tcp协议accept操作,其主要完成的功能是,从已经完成三次握手的队列中取控制块,如果没有已经完成的连接,则需要根据阻塞标记来来区分对待,若非阻塞则直接返回, ...
- js中的事件委托技术
1.什么是事件委托:通俗的讲,时间就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个时间本来是加在某些元素上的,然而你却加到别人身上来做,完成这 ...
- [eclipse]如何修改Eclipse编辑器的字体
步骤如下, 菜单->"Window"->“Preference”->“General”->“Appearance”->“Colors & Fo ...