动态链接库
动态链接库就是大家俗称的DLL文件,在windows系统中非常常见,是一个可以被其他程序共享的功能模块。动态连接库是不能直接执行的,它只能作为导出函数,被其他exe文件调用,一般我们都会说“导入/加载动态链接库”。
导出函数
刚才说到了一个导出函数的概念,导出函数一般跟内部函数进行比较,内部函数就是在这个文件中内部定义的函数,只能这个文件来调用。而导出函数是在这个文件中定义,这个文件能够使用,但是别的文件也是同样可以使用的。
动态链接库编程
动态链接库,顾名思义,是当程序执行的时候需要用到一些导出函数的时候才加载DLL文件,并且在使用之后会卸载掉,意味着可以节省内存。
在我们进行动态链接库编程的时候,首先需要编写DLL文件,可以用IDE新建一个动态链接库的项目,会自动生成一个DLLMain.cpp文件,里面有定义好的模版。
1  | BOOL APIENTRY DllMain( HMODULE hModule,  | 
其中DLL_PROCESS_ATTACH是加载到内存的时候执行,DLL_THREAD_ATTACH是进程中有线程时执行,DLL_THREAD_DETACH是进程中线程被结束的时候执行,DLL_PROCESS_DETACH是从内存中卸载的时候执行。
我们想要定义自己的导出函数的话,就在main函数的上面或者下面都可以
1  | #include "stdafx.h"  | 
写好了定义的代码,我们还需要新建一个模版定义文件,是.def后缀的文件,其中声明要导出的函数名称
1  | EXPORTS  | 
然后我们进行编译,就会得到dll文件了。
之后我们新建一个.c文件,定义main函数,来加载我们编译好的动态链接库文件。
1  | #include <stdio.h>  | 
代码中我们必须要先定义好我们需要引用的函数原型,在main函数中,使用LoadLibrary函数加载DLL文件,该函数会返回一个DLL文件的句柄,然后使用GetProcAddress获取导出函数的地址,其参数是之前返回的句柄,以及导出函数的名称。最后调用导出函数即可。当然了,最后不要忘记用FreeLibrary函数将句柄清空。
1  | gcc dllp.c -o dllp  | 
编译之后执行可执行文件即可发现有弹窗。

