1.基本概念

  dll(dynamic-link library),动态链接库,是微软实现共享函数库的一种方式。动态链接,就是把一些常用的函数代码制作成dll文件,当某个程序调用到dll中的某个函数的时候,windows系统才把dll加载到内存中。也就是说当程序需要的时候才链接dll,所以是动态链接。

  动态链接的好处是磁盘和内存的消耗减少,这也是dll的最初目的。同时dll也提供了模块化的函数库。不过,dll也有缺点,就是版本冲突,比如不同的应用程序共享同一个dll,而它们需求的是不同的版本,这就会出现矛盾,解决的方法是把不同版本的dll放在不同的文件夹中。

2.dll文件的编写(使用vs2013)

  首先新建一个dll项目:

  然后添加一个头文件和一个源文件(mydll.h / mydll.cpp)

  编写头文件,如下:

#ifndef _MYDLL_H_
#define _MYDLL_H_ #define EXPORT_DLL _declspec(dllexport) extern "C" EXPORT_DLL int add(int a, int b); // 即 int add(int a,int b) #endif

  编写源文件:

#include "mydll.h"
int add(int a, int b)
{
return (a + b);
}

  编译链接完成后会生成 mydll.dll和mydll.lib,这是最后的目标文件

  源文件的编写正常,区别是头文件的编写,要加上 _declspec(dllexport),这样就省去了编写.def文件 ,也可以加上 extern "C" 这样通用性更强,因为C++和C的函数名转换不一样,详细见末尾链接。

3.dll文件的使用

  dll文件的使用有两种方法,加载时动态链接和运行时动态链接

  3.1.加载时动态链接:

#include <iostream>
using namespace std; #pragma comment(lib,"mydll.lib")
extern "C" _declspec(dllimport) int add(int a, int b); int main()
{
cout << add(, ) << endl;
}

  3.2.运行时动态链接(主要使用 LoadLibrary和GetProcAddress):

#include <iostream>
#include <Windows.h>
using namespace std; typedef int(*addfun)(int a, int b); int main()
{
HMODULE hdll = LoadLibrary(LPCWSTR("mydll.dll"));
if (hdll != NULL)
{
addfun add = (addfun)GetProcAddress(hdll, "add");
if (add != NULL)
{
cout << add(, ) << endl;
}
FreeLibrary(hdll);
}
}

4.在python中使用dll

  需要安装ctypes

  使用方法:

  推荐链接:http://www.cnblogs.com/cswuyg/archive/2011/09/30/dll.html

.dll 文件编写和使用的更多相关文章

  1. DLL DEF文件编写方法 VC++ 调用、调试DLL的方法 显式(静态)调用、隐式(动态)调用

    DLL 文件编写方法: 1.建立DLL工程 2.声明.定义要导出的函数 BOOL WINAPI InitDlg( HWND hTabctrl,TShareMem* pTshare,CRect* prc ...

  2. [DLL] Dynamic link library (dll) 的编写和使用教程

    前一阵子,项目里需要导出一个DLL,但是导出之后输出一直不怎么对,改了半天才算改对...读了一些DLL教程,感觉之后要把现在的代码导出,应该还要花不少功夫...下面教程参照我读的3个教程写成,所以内容 ...

  3. delphi 基础之三 编写和调用dll文件

    delphi 编写和调用dll文件   Windows 的执行文件可以划分为两种形式程序和动态连接库 (DLLs).一般程序运行是用.EXE文件,但应用程序有时也可以调用存储在DLL的函数. 在如下几 ...

  4. VC2010编写Dll文件(转)

    源:VC2010编写Dll文件 1. 打开VS2010[Flie / New / Project / Visual C++ / Win32 / Win32 Console Application]在下 ...

  5. 、Dll文件的编写 调用 说明

    1>新建Dll文件TestLib.dll 新建Unit文件U_TestFunc U_TestFunc代码如下: unit U_TestFunc; interface uses //尽可能的少us ...

  6. Delphi中编写无输出函数名的DLL文件(有点意思)(400多篇博客)

    用 Delphi 用长了,总是发现,有些和 MS 不同的地方.例如,MS 的公开库中,常常隐藏了许多重要函数,这些函数在系统中常常有起着非常巨大的作用.一旦知道如何调用,可以给自己的应用程序提供很强的 ...

  7. C++编写DLL文件

    动态链接库DLL文件与EXE文件一样也是可执行文件,但是DLL也被称为库,因为里面封装了各种类.函数之类的东西,就像一个库一样,存着很多东西,主要是用来调用的.调用方式主要分为两种:隐式(通过lib文 ...

  8. .lib文件 .h文件 .dll文件

    .lib代表的是静态数据连接库,在windows系统中起到链接程序和函数的作用,存放的是函数的是函数调用的信息,是obj文件的集合.相当于linux中的.a或.0. .so文件.lib文件是不对外公开 ...

  9. vs2010下C++调用lib或dll文件

    注: DLL:表示链接库,包含dll,lib文件: dll: 表示my.dll文件 lib: 表示my.lib文件 C++ 调用.lib的方法: 一: 隐式的加载时链接,有三种方法 1  设置工程的 ...

随机推荐

  1. JS排序算法

    1.冒泡排序 冒泡算法是比较相邻的两项,如果前者比后者大,就交换他们. 假设一共有n项,那么一共需要n-1趟,第一趟需要交换n-1次,但是第一趟结束后,最后一项基本确定就是最大项了,所以第二次需要交换 ...

  2. 浅谈Java的集合框架

    浅谈Java的集合框架 一.    初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...

  3. html、css、js实现手风琴图片滑动

    手风琴图片滑动是我最近学的一个图片的效果,感觉不错,分享给大家. 最终效果见 :http://gjhnstxu.me/squeezebox/demo.html 详细代码如下: html代码: < ...

  4. 算法模板——KMP字符串匹配

    功能:输入一个原串,再输入N个待匹配串,在待匹配串中找出全部原串的起始位置 原理:KMP算法,其实这个东西已经包含了AC自动机的思想(fail指针/数组),只不过适用于单模板匹配,不过值得一提的是在单 ...

  5. 使用IDEA的gradle整合spring+ mybatis 采用javaconfig配置

    1.新建一个工程 2.工程目录 3.添加gradle.propertes文件 activeMQVersion=5.7.0 aspectJVersion=1.7.2 commonsLangVersion ...

  6. springMVC中文乱码问题解决

    1:表单提交controller获得中文参数后乱码解决方案 注意:  jsp页面编码设置为UTF-8 form表单提交方式为必须为post,get方式下面spring编码过滤器不起效果 <%@  ...

  7. html5常用英语单词

    Aabsolute 绝对active 激活的align 对齐alpha 半透明度animation 卡通片绘制auto 自动aside 偏栏 Bbackground 背景bgcolor 背景颜色blo ...

  8. ionic/cordvoa 修改platform文件夹里的文件,build会覆盖问题

    这个问题开始让我感觉很崩溃,然后,我也很意外,如果遇到可以试一试 情景: 编辑platform/android/build.gradle 看了一下cordova 命令,好像还没这个命令,但是我还真的执 ...

  9. Android -- 自定义StepView实现个人信息验证进度条

    1,项目中要用到个人信息验证的在网上找了一下,好像有封装好了的StepView,首先感谢一下作者,这是作者的地址,效果图如下: 2,正准备撸起袖子就是一顿复制粘贴的时候,发现效果图成这个样子了(其实这 ...

  10. 最短路径之Dijkstras算法(图片格式)