创建 MFC DLL-使用DEF文件

作者 : admin 本文共1587个字,预计阅读时间需要4分钟 发布时间: 2024-06-10 共2人阅读

本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系本人将于及时删除

利用“MFC动态链接库”项目模板可以创建MFC DLLDLL文件与可执行文件非常相似,不同点在于DLL包含有导出表(Export Table)。导出表包含DLL中每个导出函数的名字,这些函数是进入DLL的入口点。只有导出表中的函数可以被外部程序调用。

MFC DLL中导出函数常用以下两种方法:使用模块定义文件(.def和使用关键字_declspec(dllexport)

DEF文件是一个包含EXE文件或DLL文件声明的文本文件。每个DEF文件至少必须包含LIBRARY语句和EXPORTS 语句,其他语句可以省略。

DEF文件常用的模块语句如下:

Ø
第一个语句必须是
LIBRARY
语句
,这个语句指出
DLL
的名字,链接器将这个名字放到
DLL
导入库中,
DLL
导入库包含了指向外部
DLL
的函数索引指针。

Ø
EXPORTS
语句列出被导出函数的名字, 以及导出函数的数值(由
@
号与数字构成)。序数值可以省略,编译器会为每个导出函数指定一个,但这样指定的值不如自己指定的明确。

Ø
使用
DESCRIPTION
语句描述
DLL
的用途,这个语句可以省略。

Ø
使用



开头的注释语句。

注意:使用“
MFC
动态链接库”项目模板创建一个
MFC DLL
时,
Ap
向导将创建一个
DEF
文件的框架,并自动添加到项目中。建立
DLL
时,链接器使用
.def
文件来创建一个导出文件(
.exp
)和一个导入库文件(
.lib
),然后使用导出文件来创建
.
dll
文件。

9.1】创建一个计算正方形和圆的面积的MFC 常规DLL的动态连接库MFCLibraryDll。

(1) 启动Visual Studio IDE,创建一个解决方案。

(2) 使用“MFC动态链接库”项目模板,在解决方案中新建一个名为MFCLibraryDll的MFC动态链接库项目。

创建 MFC DLL-使用DEF文件插图

创建 MFC DLL-使用DEF文件插图(1)

创建 MFC DLL-使用DEF文件插图(2)

单击“下一步”按钮后进入“MFC DLL类型”设置窗口,如图所示。本例采用默认设置,单击“确定”按钮,向导自动生成相关的文件和资源。

选择IDE的“解决方案资源管理器”视图窗口,可以看到向导生成的文件。在头文件夹里有MFCLibraryDll.h文件,在源文件夹里有MFCLibraryDll.cpp文件,可以在MFCLibraryDll.h文件里添加自定义函数的原型,在MFCLibraryDll.cpp文件中定义函数。此外,在源文件夹里还有一个MFCLibraryDll.def文件。如图所示。

创建 MFC DLL-使用DEF文件插图(3)

(3) 在动态链接库中添加两个函数AreaEllipse()AreaSquare (),分别实现计算正方形和圆的面积的功能。

Ø
在MFCLibraryDll.h文件中添加函数原型

extern "C" double AreaEllipse(double r);

extern "C" double AreaSquare(double x);

创建 MFC DLL-使用DEF文件插图(4)

Ø
在Regulardll.cpp文件中实现函数

extern "C" double AreaEllipse(double r)
{

   return 3.1415926*r*r; 
}

extern "C" double AreaSquare(double x)
{

   return x*x;  
}  

创建 MFC DLL-使用DEF文件插图(5)

(4) 在MFCLibraryDll.def文件中声明需要导出的函数

第一个语句必须是LIBRARY语句,这个语句指出DLL的名字,链接器将这个名字放到DLL导入库中,DLL导入库包含了指向外部DLL的函数索引指针。

AreaEllipse @1
AreaSquare  @2

创建 MFC DLL-使用DEF文件插图(6)

(5) 编译、链接程序,生成了以.dll为后缀的动态链接库Regulardll.dll

找到项目MFCLibraryDll所在的路径,在Debug文件夹下会看到生成的动态链接库MFCLibraryDll.dll和MFCLibraryDll.lib,如图所示。(解决方案下的Debug文件)

创建 MFC DLL-使用DEF文件插图(7)

本站无任何商业行为
个人在线分享 » 创建 MFC DLL-使用DEF文件
E-->