1. dll帮助类
(1)dll的动态链接
①传统的调用方式:先调用LoadLibrary来加载dll,再定义函数指针类型,接着调用GetProcAddress获取函数地址。然后通过函数指针调用函数,最后通过FreeLibrary卸载dll
②问题:使用dll的过程存在重复逻辑。此外,如果dll中的函数较多,就需要频繁的定义函数指针和反复调用GetProcAddress。
(2)解决方案
①封装GetProcAddress函数,将FARPROC类型的函数指针转换成std::function。
②由于函数的入参数目、类型及返回值各不相同,可以通过result_of和可变参数模板来解决(见ExecuteFunc函数)。
【编程实验】简化dll的调用
//Dll.h
#ifndef _DLL_H_ #define _DLL_H_ #ifdef BUILD_DLL /* DLL export */ #define EXPORT __declspec(dllexport) #else /* EXE import */ #define EXPORT __declspec(dllimport) #endif #ifdef __cplusplus extern "C"{ #endif //求最大值 EXPORT int Max(int a, int b); //求和 EXPORT int Sum(int a, int b); #ifdef __cplusplus } #endif #endif