说明:应工程需要,学习动态链接库
1、Kernel32.dll,包含用于管理内存、进程和线程的各个函数
2、User32.dll,包含用于执行用户界面任务的各个窗口函数(比如窗口的创建和消息的传递)
3、GDI32.dll,包含用于画图和显示文本的各个函数
4、使用动态链接库时候,需要的文件,引入库和DLL
引入库包含被DLL导出的函数和变量的符号名,后缀的.lib
DLL包含实际的函数和数据。
在编译链接可执行文件时,只需要链接引入库,DLL中的代码和函数数据并不会赋值到可执行文件中,在运行的时候再去加载DLL,访问DLL中的导出函数
5、代码页面和数据页面。DLL使用的是虚拟内存中,多个进程可以共享统一代码
6、动态链接库加载两种方式:隐式链接,显示加载
7、_declspec(dllexport)导出函数关键符
此时会产生.lib文件,里面是导出函数名称
extern 外部函数声明, 与 _declspec(dllimport)结果相同,后者为常用
链接时候使用lib文件(将该库设置的时候LINK设置即可)
运行时加载DLL文件
头文件,包含导出函数原型的信息,给调用动态链接库的程序所使用
条件编译指令
#ifdef DLL_API
#else
#define DLL_API _declspec(dllimport)//此处是宏定义
#endif
..\**\当前目录的上一层
在编译程序的时候,头文件不参与编译,源文件单独编译
在动态链接库中只有被导出的函数和类才可以被使用
8、dumpbin??
9、导出类,在class和类名之间加入_declspec(dllexport)
类的成员函数和变量访问权限与对类的访问权限相同,
或者将某个成员函数前面加入该句话,则只导出此成员函数
10、GetForegroundWindow(返回当前正在工作的窗口句柄),返回值HWND
11、memset(参数1,参数2,参数3)将参数1的参数3个用参数2代换并返回参数1
12、导出函数:C++编写的动态链接库直接给C语言客户端调用时会发生问题
extern "C(此处需要大写)" _declspec(dllexport)可以实现语言的转换
表明名字没有发生改变
_stdcall 函数名称后面是参数所占字节数
13、模块定义文件,后缀名def
LIBRARY 动态链接库名称
EXPORTS 导出的函数名称
加载动态链接库 LoadLibrary(可执行的名字) 返回模块句柄
GetProcAddress()
int (*ADDPROC)(int a,int b)函数指针
14、DLLMain动态链接库可选入口点函数