用C语言编写DLL

Python015

用C语言编写DLL,第1张

一.动态链接库(dll)结构

——dll中定义有两种函数:导出函数(export

function)和内部函数

(internal

function),导出函数可以被其他模块调用,内部函数只能在dll内部使用。我们在用c++定制dll文件时,需要编写的就是包含导出函数表的模块定义文件(.def)和实现导出函数功能的c++文件。下面以sample.dll为例介绍def文件和实现文件的结构:

——1.模块定义文件(.def)是由一个或者多个用于描述dll属性的模块语

句组成的文本文件,每个.def文件至少必须包含以下模块定义语句:

第一个语句必须是library语句,指出dll的名字。

exports语句列出被导出函数的名字。

可以使用description语句描述dll的用途(此句可选)。

""对一行进行注释(可选)

——2.实现文件(.cpp文件为例)

——实现入口表函数的.cpp文件中,包含dll入口点处理的api函数和导出

函数的代码。

VC编写dll文件

1、VC++->New->Project->Win32 Dynamic_Link Library

2、选择创建一个空工程

首先DLL需要一个头文件,所以新建一个C\C++ Header File

这个头文件中必须包含想要输出的变量和函数,头文件必须定义用于输出的任何符号和数据结构。

例如 :

这里边又一个预定义

#ifdef MYLIBAPI

#else

#define MYLIBAPI extern "C" __declspec(dllimport)

#endif

为什么要加这一句呢?

因为相同的函数被C++编译后在符号库中的名字与C语言编译后的不同,所以如果使用的是标准C就要告诉编译器,要保留原来的名字,这里用extern “C”来实现。

当然DLL还需要一个源文件,在工程中新建一个 C++Source File

代码如下,此代码 中的宏定义是必须的。

编译以后,会在工程的DEBUG文件夹下生成一个DLL文件。这样DLL文件就创建成功。

下面展示一下如何使用这个DLL。代码如下,这里是显示引用DLL。

运行以后程序就会输出:1+2=3

证明调用动态链接库里的 Add函数成功。