1. DLL是什么
可以参考 https://zhuanlan.zhihu.com/p/146546063 这篇文章
下面说一下我的理解
2. DLL显式调用
LoadLibrary()
GetProcAddress()
FreeLibrary() 三步
(1)LoadLibrary() 加载dll并返回一个句柄,可以是HMODULE或者HINSTANCE(HINSTANCE在win32下与HMODULE是相同的东西,在Win32下还存在主要是因为win16)
(2)然后用GetProcAddress()获得DLL文件中函数的的地址,(函数的入口点)之后就可以调用dll中的函数了
(3)最后要用FreeLibrary(HMODULE)卸载dll
优点:可以决定何时记载和卸载dll,充分体现DLL的灵活性。
缺点:调用繁琐。
完整示例代码
#include "testDLL.h"
#pragma comment(lib,"testDLL.lib")
LPCSTR testFun("test");
HMODULE hModule = LoadLibraryW(L"testDLL.dll");
if (hModule != NULL) {
GetProcAddress(hModule, testFun);
}
//调用testFun
testFun();
FreeLibrary(HModule);//卸载dll
3. DLL隐式调用
(1)读入DLL对应的testdll.lib文件。
(2)dllimport导出dll里面的函数
通过这两步就可以在程序里面调用
完整示例代码
#pragma comment(lib,"testDLL.lib")
extern "C" _declspec(dllimport)void testFun(para1,para2);
//调用testFun
testFun(para1,para2);//示意一下,假设你自己写的testFun函数有两个参数
这里需要DLL文件以及它对应的.h文件,其实只有DLL文件也是可以的,咱们下期再说。