当前位置:网站首页 > 编程语言 > 正文

动态库调用方法(动态库如何调用)



GUI(Graphical User Interface)应用,链接器选项:/SUBSYSTEM:WINDOWS

CUI(Console User Interface)应用,链接器选项:/SUBSYSTEM:CONSOLE

_tWinMain 与 _tmain 函数声明

部分知识点来自《Windows 核心编程(第五版)》

(1)扩展了应用程序的特性

(2)简化了项目管理

(3)有助于节省内存

(4)促进了资源的共享

(5)促进了本地化

(6)有助于解决平台间的差异

(7)可以用于特殊目的

(1)创建 DLL,事实上是在创建可供一个可执行模块调用的函数

(2)当一个模块提供一个内存分配函数(malloc、new)的时候,它必须同时提供另一个内存释放函数(free、delete)

(3)在使用 C 和 C++ 混编的时候,要使用 extern "C" 修饰符

(4)一个 DLL 可以导出函数、变量(避免导出)、C++ 类(导出导入需要同编译器,否则避免导出)

(5)DLL 模块:cpp 文件中的 __declspec(dllexport) 写在 include 头文件之前

(6)调用 DLL 的可执行模块:cpp 文件的 __declspec(dllimport) 之前不应该定义 MYLIBAPI

1、包含可执行文件的目录

2、Windows 的系统目录,可以通过 GetSystemDirectory 得到

3、16 位的系统目录,即 Windows 目录中的 System 子目录

4、Windows 目录,可以通过 GetWindowsDirectory 得到

5、进程的当前目录

6、PATH 环境变量中所列出的目录

DllMain 函数

载入卸载库

LoadLibrary、LoadLibraryExA、LoadPackagedLibrary、FreeLibrary、FreeLibraryAndExitThread 函数声明

显示地链接到导出符号

GetProcAddress 函数声明

DumpBin.exe 查看 DLL 信息

在 VS 的开发人员命令提示符 使用 DumpBin.exe 可查看 DLL 库的导出段(导出的变量、函数、类名的符号)、相对虚拟地址(RVA,relative virtual address)。如:

LoadLibrary 与 FreeLibrary 流程图

LoadLibrary 与 FreeLibrary 流程图

DLL 库的编写(导出一个 DLL 模块) DLL 头文件

DLL 源文件

DLL 库的使用(运行时动态链接 DLL)

DLL 库的使用(运行时动态链接 DLL)

运行库(Runtime Library)

典型程序运行步骤

(1)操作系统创建进程,把控制权交给程序的入口(往往是运行库中的某个入口函数)

(2)入口函数对运行库和程序运行环境进行初始化(包括堆、I/O、线程、全局变量构造等等)。

(3)入口函数初始化后,调用 main 函数,正式开始执行程序主体部分。

(4)main 函数执行完毕后,返回到入口函数进行清理工作(包括全局变量析构、堆销毁、关闭I/O等),然后进行系统调用结束进程。

一个程序的 I/O 指代程序与外界的交互,包括文件、管程、网络、命令行、信号等。更广义地讲,I/O 指代操作系统理解为 “文件” 的事物。

_start -> __libc_start_main -> exit -> _exit

其中 main(argc, argv, __environ) 函数在 __libc_start_main 里执行。

int mainCRTStartup(void)

执行如下操作:

(1)初始化和 OS 版本有关的全局变量。

(2)初始化堆。

(3)初始化 I/O。

(4)获取命令行参数和环境变量。

(5)初始化 C 库的一些数据。

(6)调用 main 并记录返回值。

(7)检查错误并将 main 的返回值返回。

大致包含如下功能:

启动与退出:包括入口函数及入口函数所依赖的其他函数等。

标准函数:有 C 语言标准规定的C语言标准库所拥有的函数实现。

I/O:I/O 功能的封装和实现。

堆:堆的封装和实现。

语言实现:语言中一些特殊功能的实现。

调试:实现调试功能的代码。

包含:

标准输入输出(stdio.h)

文件操作(stdio.h)

字符操作(ctype.h)

字符串操作(string.h)

数学函数(math.h)

资源管理(stdlib.h)

格式转换(stdlib.h)

时间/日期(time.h)

断言(assert.h)

各种类型上的常数(limits.h & float.h)

变长参数(stdarg.h)

非局部跳转(setjmp.h)

写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

微信公众号:

C语言零基础入门教程(83集全)

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!


到此这篇动态库调用方法(动态库如何调用)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 单片机程序编写(单片机程序编写流水灯代码)2025-11-09 08:18:10
  • pdfView 怎么删除其中一页(pdf怎样删除其中一页)2025-11-09 08:18:10
  • 上线了小程序制作(上线了小程序制作什么意思)2025-11-09 08:18:10
  • 字体图标就是将图标字体化,字体是什么意思(字体图标就是将图标字体化,字体是什么意思)2025-11-09 08:18:10
  • modbus485协议(modbus协议40001)2025-11-09 08:18:10
  • 电脑剪辑视频教学视频(怎么在电脑上剪辑视频?用什么工具最好?)2025-11-09 08:18:10
  • 公司的阶级制度(公司阶级制度特别严重)2025-11-09 08:18:10
  • 广度优先搜索是回溯吗(广度优先搜索是什么)2025-11-09 08:18:10
  • kubelet怎么发音(kubeadm怎么读)2025-11-09 08:18:10
  • 104规约遥信报文(104规约遥信能最多多少个)2025-11-09 08:18:10
  • 全屏图片