动态链接库(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 文件创建与使用相关推荐

  1. windows内核情景分析---进程线程1

    本篇主要讲述进程的启动过程.线程的调度与切换.进程挂靠 一.进程的启动过程: BOOL CreateProcess ( LPCTSTR lpApplicationName,               ...

  2. jdk包含java语言核心的类_1.1 jvm核心类加载器--jdk源码剖析

    目录 前提: 运行环境 1. 类加载的过程 1.1 类加载器初始化的过程 1.2 类加载的过程 1.3 类的懒加载 2. jvm核心类加载器 3. 双亲委派机制 4. 自定义类加载器 5. tomca ...

  3. 生成clr库_如何使用CLR存储过程发送数据库邮件

    生成clr库 In this article, I am going to explain how we can send an email from SQL Server express editi ...

  4. SQL Server 非对称秘钥管理

    ​在<SQL Server 非对称秘钥在数据加密中的应用>一文中,我们了解到可以使用非对称秘钥进行数据加密.本文带着大家深入了解非对称秘钥的生命周期,包括创建.修改和删除. 为了熟悉非对称 ...

  5. MySQL UDF提权执行系统命令

    目录 UDF UDF提权步骤 使用MSF进行UDF提权 UDF提权复现(php环境) UDF UDF (user defined function),即用户自定义函数.是通过添加新函数,对MySQL的 ...

  6. 《独辟蹊径的编程思维——“拿来主义”编程》

    <独辟蹊径的编程思维--"拿来主义"编程> 基本信息 作者: 李瑞民 出版社:电子工业出版社 ISBN:9787121223990 上架时间:2014-2-27 出版日 ...

  7. 静态链接库,动态链接库【滴水逆向三期48笔记】

    在开发过程中,我们通常会有很多函数,需要多次使用或在不同的程序中使用该函数,也有可能我们会将我们写好的函数给别人使用,但是我们又不想给他源代码,毕竟代码是我们花了很多功夫写出来的,那么我们如何不发给其 ...

  8. JAVA创建对象全过程详解

    java世界里面对象无处不在,拿在创建对象的时候都经过哪些步骤? 总结下来大概分为这几步. 对象创建的过程(new 对象的时候) 判断类有没有被加载 如果没有(就开始加载类(就是类的加载过程)) 初始 ...

  9. Sandcastle 学习教程 (1) 基础入门

    概要 目前可找到SandCastle学习资源十分有限.而据我所知能够生成帮助文档的工具目前只有SandCastle(NDoc早就已经停止更新了,参见"相关文档"中的第二篇.) 有关 ...

最新文章

  1. 农用地包括哪些地类_征用土地公告应当包括哪些内容?|楹庭拆迁律师
  2. 喜报!神策数据入选“中国科创企业百强榜”前 3 名
  3. 运行ant脚本(转载)
  4. WIN7 Wireshark: There are no interfaces on which a capture can be done
  5. 主从切换_Mysql 复制如何进行主从库切换(计划内)
  6. win2003安装邮箱服务器,windows2003邮件服务器
  7. 集成CCFlow工作流与GPM的办公系统驰骋CCOA介绍(一)
  8. MatConvnet工具箱文档翻译理解四
  9. 安装Ubuntu最后重启出错Write through
  10. 电脑显示器黑屏|显示器突然黑屏|显示器闪黑屏
  11. iOS之加速计、陀螺仪(UIAccelermeter、Core Motion)
  12. 经纬财富:新乡怎么炒白银能挣到钱?
  13. 大牛云集!清华大学2019年姚班及智班第一届AI本科生名单公布!
  14. KNN算法实现鸢尾花的分类
  15. python面向对象实例王者荣耀_大牛程序员利用Python开发王者荣耀带妹神器,一路直奔上王者...
  16. excel计算二元线性回归_谁说菜鸟不会数据分析(高级篇)及竞争力 excel②
  17. 手写字体的fisher算法识别
  18. 什么是安卓马甲APP?寻求高手安卓马甲包封装APP上架
  19. (二)五次多项式轨迹规划
  20. 那些花儿(夏洛特烦恼版)

热门文章

  1. 分布式算法(一致性Hash算法)
  2. Nacos系列:欢迎来到Nacos的世界!
  3. 算法竞赛入门经典第六章(例题) B - Rails(涉及到栈的运用)
  4. 潜谈IT从业人员在传统IT和互联网之间的择业问题(上)-传统乙方形公司
  5. javaEE异常摘要——更换工作区相同tomcat当部署在同一个项目疑难解答
  6. 【翻译】Ext JS 6早期访问版本发布
  7. Spring 基础概念——DI、IOC(一)
  8. iphone 如何成功的把three20成功的添加到xcode中去。
  9. 生活不可缺的46个搜索引擎
  10. C++ Qt学习笔记(3)QT中的文本处理