admin 管理员组

文章数量: 1087139


2024年4月18日发(作者:eclipse ide是什么意思)

DLL的创建与调用

1、 DLL的概念

DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数、变量或类。

这些可以直接拿来使用。

静态链接库与动态链接库的区别:

(1)静态链接库与动态链接库都是共享代码的方式。静态链接库把最后的指令都包含

在最终生成的EXE文件中了;动态链接库不必被包含在最终EXE文件中,EXE文件执行时

可以“动态”地引用和卸载这个与EXE独立的DLL文件。

(2) 静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还

可以再包含其他的动态或静态链接库。

动态链接库的分类:Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC

动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。

非MFC动态库不采用MFC类库结构,其导出函数为标准的C接口,能被非MFC或MFC

编写的应用程序所调用;MFC规则DLL 包含一个继承自CWinApp的类,但其无消息循

环;MFC扩展DLL采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用

程序所调用。

2、 创建一个DLL

2.1 非MFC的DLL

2.1.1声明导出函数:

extern “C” __declspec(dllexport) int add(int a, int b);

其中 extern “C”为声明为C编译。由于C++编译器在编译的时候会造成其函数名

的该变,在其他应用程序中导致函数不可调用,而C编译器则不会在编译后改变其函数名。

这样如果用C编译的程序来调用该dll中的函数时,可能会造成找不到该函数。

__declspec(dllexport)表示该函数为DLL输出函数,即其他应用程序可以调用该函

从dll中声明输出函数有两种方式:

(1) 另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关

被链接程序的导出、属性及其他方面的信息。

(2) 用__declspec(dllexport)来声明函数

如果使用Visual C++来创建dll,对于同样用VC创建的exe来说,调用dll没有什么

问题。而如果用其他工具来创建的exe来调用dll,就会出现问题。因为即使你不用C++

编译器,Microsoft C编译器也会损害C函数。当用__stdcall将函数输出时,C编译器会

将函数改为_func@1的形式。在这里需要在.def文件中加入EXPORTS节来输出函数:

EXPORTS

func


本文标签: 函数 调用 文件 链接库 编译