创建 MFC DLL-使用DEF文件

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

利用“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类型”设置窗口,如图所示。本例采用默认设置,单击“确定”按钮,向导自动生成相关的文件和资源。

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

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

Ø 在MFCLibraryDll.h文件中添加函数原型
extern "C" double AreaEllipse(double r);

extern "C" double AreaSquare(double x);
Ø 在Regulardll.cpp文件中实现函数
extern "C" double AreaEllipse(double r)
{

   return 3.1415926*r*r; 
}

extern "C" double AreaSquare(double x)
{

   return x*x;  
}  

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

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

AreaEllipse @1
AreaSquare  @2

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

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

相关推荐

  1. ubuntu使用 .deb 文件安装VScode

    2024-06-05 20:58:07       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-05 20:58:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-05 20:58:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-05 20:58:07       82 阅读
  4. Python语言-面向对象

    2024-06-05 20:58:07       91 阅读

热门阅读

  1. LeetCode 每日一题 数学篇 LCR 182.动态口令

    2024-06-05 20:58:07       34 阅读
  2. 如何区分A类B类C类网络地址?

    2024-06-05 20:58:07       28 阅读
  3. Shell编程之免交互

    2024-06-05 20:58:07       31 阅读
  4. 深度解读chatGPT基本原理

    2024-06-05 20:58:07       27 阅读
  5. onnx模型转换到rknn脚本

    2024-06-05 20:58:07       25 阅读
  6. # SpringBoot 如何让指定的Bean先加载

    2024-06-05 20:58:07       35 阅读
  7. Linux: network: arp 导致问题一例

    2024-06-05 20:58:07       36 阅读
  8. iOS Hittest 机制和实际应用之一 hittest方法

    2024-06-05 20:58:07       29 阅读
  9. iOS object-c 常用API汇总

    2024-06-05 20:58:07       33 阅读
  10. iOS内购欺诈漏洞

    2024-06-05 20:58:07       32 阅读
  11. #媒体#知识分享#职场发展

    2024-06-05 20:58:07       32 阅读
  12. 如何使用 Vue CLI 创建和管理一个 Vue 项目

    2024-06-05 20:58:07       35 阅读
  13. SD-WAN怎样提升企业办公效率

    2024-06-05 20:58:07       29 阅读
  14. 使用Node.js搭建服务器

    2024-06-05 20:58:07       30 阅读