调用DLL文件的两种方法(显式调用/隐式调用)完整示例

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文件也是可以的,咱们下期再说。

你可能感兴趣的:(C++)