【编程学习】windows C++ 动态链接库(DLL)的编写和使用

您所在的位置:网站首页 彩票店周末开门吗现在 【编程学习】windows C++ 动态链接库(DLL)的编写和使用

【编程学习】windows C++ 动态链接库(DLL)的编写和使用

2023-07-30 14:58| 来源: 网络整理| 查看: 265

动态链接库,Dynamic Link Library,简称“DLL”,是一个预先经过编译的二进制程序,能够被其它程序所调用,但与可执行文件(.exe)不同,它不能独立运行,必须由其它的程序进行调用。

静态链接库与动态链接库

静态链接库 利用函数和数据编译成的一个二进制文件,扩展名为.Lib。当应用程序调用静态库进行编译链接时,链接器会从库中复制这些函数和数据并把它们和应用程序的其他模块组合起来创建最终的可执行文件(.exe)。发布产品时,只需要发布这个可执行文件,并不需要发布被使用的静态库。 ——特点:静态库对函数库的链接是放在编译时期完成的;程序在运行时与函数库再无瓜葛,移植方便;浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。

动态链接库 在使用动态库的时候,往往提供两个文件:一个引入库文件(.lib)和一个DLL文件(.dll)。虽然引入库的后缀名也是“lib”,但是,动态库的引入库文件和静态库文件有着本质上的区别: 对一个DLL来说,其引入库文件包含该DLL导出的函数和变量的符号名,而DLL文件包含该DLL实际的函数和数据。在使用动态库的情况下,在编译链接可执行文件时,只需要链接该DLL的引入库文件,该DLL中的函数代码和数据并不复制到可执行文件中,直到可执行程序运行时,才去加载所需的DLL,将该DLL映射到进程的地址空间中,然后访问DLL中导出的函数。这时,在发布产品时,除了发布可执行文件以外,同时还要发布该程序将要调用的动态链接库。 ——特点:动态库把对一些库函数的链接载入推迟到程序运行的时期;可以实现进程之间的资源共享(因此动态库也称为共享库);将一些程序升级变得简单。

Window与Linux执行文件格式不同,在创建动态链接库的时候有一些差异,本文编写时,主要利用VS2012在windows10系统上进行编译。

动态链接库的编写 创建Win32控制台程序, 选择“DLL”和“导出符号”选项。 在这里插入图片描述 得到: 在这里插入图片描述编写一个简单的相加函数 // MyDLL.h #ifdef MYDLL_EXPORTS #define MYDLL_API __declspec(dllexport) #else #define MYDLL_API __declspec(dllimport) #endif MYDLL_API float MyAdd(float a, float b); // MyDLL.cpp #include "stdafx.h" #include "MyDLL.h" // Add函数 MYDLL_API float MyAdd(float a, float b) { float c; c = a + b; return c; } 编译 Debug模式,win32平台,生成解决方案,在Debug文件夹中有“.lib”和“.dll”文件。 动态链接库的调用

动态链接库的调用共有两种方式:1)隐式调用;2) 显示调用。

1. 隐式调用

新建win32控制台程序”DLLtest”,将上一步中得到的MyDLL.h, MyDLL.lib, MyDLL.dll复制到新建项目源程序所在的文件夹中。此处可类比OpenCV的配置过程。

// DLLtest.cpp #include "stdafx.h" #include "MyDLL.h" #pragma comment(lib, "MyDLL.lib") //或者在依赖项中添加 #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { float a = 8.5; float b = 7.5; float sum; sum = MyAdd(a, b); cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3