.dll 文件编写和使用
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 文件编写和使用的更多相关文章
- DLL DEF文件编写方法 VC++ 调用、调试DLL的方法 显式(静态)调用、隐式(动态)调用
DLL 文件编写方法: 1.建立DLL工程 2.声明.定义要导出的函数 BOOL WINAPI InitDlg( HWND hTabctrl,TShareMem* pTshare,CRect* prc ...
- [DLL] Dynamic link library (dll) 的编写和使用教程
前一阵子,项目里需要导出一个DLL,但是导出之后输出一直不怎么对,改了半天才算改对...读了一些DLL教程,感觉之后要把现在的代码导出,应该还要花不少功夫...下面教程参照我读的3个教程写成,所以内容 ...
- delphi 基础之三 编写和调用dll文件
delphi 编写和调用dll文件 Windows 的执行文件可以划分为两种形式程序和动态连接库 (DLLs).一般程序运行是用.EXE文件,但应用程序有时也可以调用存储在DLL的函数. 在如下几 ...
- VC2010编写Dll文件(转)
源:VC2010编写Dll文件 1. 打开VS2010[Flie / New / Project / Visual C++ / Win32 / Win32 Console Application]在下 ...
- 、Dll文件的编写 调用 说明
1>新建Dll文件TestLib.dll 新建Unit文件U_TestFunc U_TestFunc代码如下: unit U_TestFunc; interface uses //尽可能的少us ...
- Delphi中编写无输出函数名的DLL文件(有点意思)(400多篇博客)
用 Delphi 用长了,总是发现,有些和 MS 不同的地方.例如,MS 的公开库中,常常隐藏了许多重要函数,这些函数在系统中常常有起着非常巨大的作用.一旦知道如何调用,可以给自己的应用程序提供很强的 ...
- C++编写DLL文件
动态链接库DLL文件与EXE文件一样也是可执行文件,但是DLL也被称为库,因为里面封装了各种类.函数之类的东西,就像一个库一样,存着很多东西,主要是用来调用的.调用方式主要分为两种:隐式(通过lib文 ...
- .lib文件 .h文件 .dll文件
.lib代表的是静态数据连接库,在windows系统中起到链接程序和函数的作用,存放的是函数的是函数调用的信息,是obj文件的集合.相当于linux中的.a或.0. .so文件.lib文件是不对外公开 ...
- vs2010下C++调用lib或dll文件
注: DLL:表示链接库,包含dll,lib文件: dll: 表示my.dll文件 lib: 表示my.lib文件 C++ 调用.lib的方法: 一: 隐式的加载时链接,有三种方法 1 设置工程的 ...
随机推荐
- Ceph osd启动报错osd init failed (36) File name too long
在Ceph的osd节点上,启动osd进程失败,查看其日志/var/log/ceph/ceph-osd.{osd-index}.log日志,报错如下: 2017-02-14 16:26:13.55853 ...
- Cocos2d-x shader学习3: sprite描边(Outline)
Cocos2d-x 3.x的label使用了freetype字体引擎(http://www.freetype.org/),可以很轻松的实现描边和阴影效果.所以本篇文章只针对于sprite来实现描边效果 ...
- ycsb对hbase性能测试的研究
ycsb对hbase性能测试 1.ycsb安装 下载ycsb软件 wget https://github.com/downloads/brianfrankcooper/YCSB/ycsb-0.1.4. ...
- 解决VS2015 VBCSCompiler.exe 占用CPU100%的问题
使用VS2015重复编译运行会发现系统运行缓慢甚至卡死,打开windows任务管理器可以发现CPU已经飙到了100%, VBCSCompiler.exe进程出现多个实例并且占用了大量CPU. 解决方案 ...
- KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架之koahub-loader
koahub loader Installation $ npm install koahub-loader Use with koa // 1.model loader var model = ...
- 启动tomcat直接报错:org.apache.tomcat.util.digester.Digester startElement
今天很奇怪,自己手动搭建了一个ssm(spring+springmvc+mybatis)的项目,然后添加到tomcat下,启动直接报错: 2017-3-19 9:24:47 org.apache.to ...
- Android全局异常捕捉
// 定义自定义捕捉 package com.xiaosw.test; import java.io.File; import java.io.FileOutputStream; import jav ...
- javaList容器中容易忽略的知识点
在集合类框架中,List是使用比较多的一种 List |---Arraylist 内部维护的是一个数组,查找快增删慢 |---LinkedList 底层是链表,增删快查询慢. |---Vctor线程安 ...
- 时间相关库<ctime>解析
原创作品,转载请注明来源:http://www.cnblogs.com/shrimp-can/p/5649487.html 一.定义的类型 1.clock_t:时钟类型 2.size_t:unsign ...
- javascript . 04 匿名函数、递归、回调函数、对象、基于对象的javascript、状态和行为、New、This、构造函数/自定义对象、属性绑定、进制转换
匿名函数: 没有名字的函数,函数整体加小括号不报错, 函数调用 : a:直接调用 (function (){函数体}) ( ) ; b:事件绑定 document.onlick = functio ...