dll 文件创建与使用
动态链接库(dll)文件主要用来共享程序,节省计算机运行时的内存空间。创建和使用dll文件一般都有两种方式(具体自己搜搜看)。这里说说我使用创建和调用方式。
dll 文件的创建:
创建工具可以使用vc6.0即可,当然visual studio 更好。
dll 中包含的是一组函数(对于c++来讲,面向对象这种方式在这里几乎派不上用场),是一个函数库。这里创建时有3个文件,.h,.cpp和 .def 文件。.h 和 .cpp 文件就是普通的头文件和源文件。
int sum(int arg1, int arg2);int sub(int arg1, int arg2);int big(int arg1, int arg2);
int sum(int arg1, int arg2) {return arg1 + arg2; }int sub(int arg1, int arg2) {return arg1 - arg2; }int big(int arg1, int arg2) {return arg1 > arg2 ? arg1 : arg2; }
上面简单的写了头文件和源文件。现在看下 def 文件。
;def exampleLIBRARY insyeah_math_dll.dll EXPORTS sum @1 sub @2 big @3
def 文件指定了dll库名和要导出的函数名,@1,@2指明函数顺序。完成三个文件之后便可编译成链接库文件。有用的是 .h,.lib 和 .dll 文件。但是,为了减少调用时的麻烦步骤,只要.dll文件即可。
dll 文件的使用:
一个dll 文件是一个函数库,调用时只要指定库和库中的函数即可。如下面的调用:
#include <windows.h> #include <iostream>using namespace std;typedef int (*MathDLL)(int, int);int main() {MathDLL math;//load math dllHMODULE hModule = ::LoadLibrary(TEXT("insyeah_math_dll.dll"));if(hModule == NULL){::FreeLibrary(hModule);}math = (MathDLL)::GetProcAddress(hModule, "sum");if(math == NULL){::FreeLibrary(hModule);}int res = math(5, 5);cout << res << endl;::FreeLibrary(hModule);system("PAUSE");return 0;}
上面的 LoadLibrary 指明调用的库名,GetProcAddress 指明库中的函数名。 FreeLibraray 关闭库调用。调用过程比较简单,只是在调用的时候需要设置与库中函数相应的函数指针,再根据指针调用函数。
转载于:https://www.cnblogs.com/rereadyou/archive/2012/12/28/2836649.html
dll 文件创建与使用相关推荐
- windows内核情景分析---进程线程1
本篇主要讲述进程的启动过程.线程的调度与切换.进程挂靠 一.进程的启动过程: BOOL CreateProcess ( LPCTSTR lpApplicationName, ...
- jdk包含java语言核心的类_1.1 jvm核心类加载器--jdk源码剖析
目录 前提: 运行环境 1. 类加载的过程 1.1 类加载器初始化的过程 1.2 类加载的过程 1.3 类的懒加载 2. jvm核心类加载器 3. 双亲委派机制 4. 自定义类加载器 5. tomca ...
- 生成clr库_如何使用CLR存储过程发送数据库邮件
生成clr库 In this article, I am going to explain how we can send an email from SQL Server express editi ...
- SQL Server 非对称秘钥管理
在<SQL Server 非对称秘钥在数据加密中的应用>一文中,我们了解到可以使用非对称秘钥进行数据加密.本文带着大家深入了解非对称秘钥的生命周期,包括创建.修改和删除. 为了熟悉非对称 ...
- MySQL UDF提权执行系统命令
目录 UDF UDF提权步骤 使用MSF进行UDF提权 UDF提权复现(php环境) UDF UDF (user defined function),即用户自定义函数.是通过添加新函数,对MySQL的 ...
- 《独辟蹊径的编程思维——“拿来主义”编程》
<独辟蹊径的编程思维--"拿来主义"编程> 基本信息 作者: 李瑞民 出版社:电子工业出版社 ISBN:9787121223990 上架时间:2014-2-27 出版日 ...
- 静态链接库,动态链接库【滴水逆向三期48笔记】
在开发过程中,我们通常会有很多函数,需要多次使用或在不同的程序中使用该函数,也有可能我们会将我们写好的函数给别人使用,但是我们又不想给他源代码,毕竟代码是我们花了很多功夫写出来的,那么我们如何不发给其 ...
- JAVA创建对象全过程详解
java世界里面对象无处不在,拿在创建对象的时候都经过哪些步骤? 总结下来大概分为这几步. 对象创建的过程(new 对象的时候) 判断类有没有被加载 如果没有(就开始加载类(就是类的加载过程)) 初始 ...
- Sandcastle 学习教程 (1) 基础入门
概要 目前可找到SandCastle学习资源十分有限.而据我所知能够生成帮助文档的工具目前只有SandCastle(NDoc早就已经停止更新了,参见"相关文档"中的第二篇.) 有关 ...
最新文章
- 农用地包括哪些地类_征用土地公告应当包括哪些内容?|楹庭拆迁律师
- 喜报!神策数据入选“中国科创企业百强榜”前 3 名
- 运行ant脚本(转载)
- WIN7 Wireshark: There are no interfaces on which a capture can be done
- 主从切换_Mysql 复制如何进行主从库切换(计划内)
- win2003安装邮箱服务器,windows2003邮件服务器
- 集成CCFlow工作流与GPM的办公系统驰骋CCOA介绍(一)
- MatConvnet工具箱文档翻译理解四
- 安装Ubuntu最后重启出错Write through
- 电脑显示器黑屏|显示器突然黑屏|显示器闪黑屏
- iOS之加速计、陀螺仪(UIAccelermeter、Core Motion)
- 经纬财富:新乡怎么炒白银能挣到钱?
- 大牛云集!清华大学2019年姚班及智班第一届AI本科生名单公布!
- KNN算法实现鸢尾花的分类
- python面向对象实例王者荣耀_大牛程序员利用Python开发王者荣耀带妹神器,一路直奔上王者...
- excel计算二元线性回归_谁说菜鸟不会数据分析(高级篇)及竞争力 excel②
- 手写字体的fisher算法识别
- 什么是安卓马甲APP?寻求高手安卓马甲包封装APP上架
- (二)五次多项式轨迹规划
- 那些花儿(夏洛特烦恼版)
热门文章
- 分布式算法(一致性Hash算法)
- Nacos系列:欢迎来到Nacos的世界!
- 算法竞赛入门经典第六章(例题) B - Rails(涉及到栈的运用)
- 潜谈IT从业人员在传统IT和互联网之间的择业问题(上)-传统乙方形公司
- javaEE异常摘要——更换工作区相同tomcat当部署在同一个项目疑难解答
- 【翻译】Ext JS 6早期访问版本发布
- Spring 基础概念——DI、IOC(一)
- iphone 如何成功的把three20成功的添加到xcode中去。
- 生活不可缺的46个搜索引擎
- C++ Qt学习笔记(3)QT中的文本处理