静态链接库的使用
方式1
1.将xxx.h 和 xxx.lib复制到要使用的项目中
2.在需要使用的文件中包含:#include “xxx.h”
3.在需要使用的文件中包含:#pragma comment(lib, “xxx.lib”)
方式2
1.将xxx.h 和 xxx.lib复制到要使用的项目中
2.在需要使用的文件中包含:#include “xxx.h”
动态链接库的创建
方法1
1.源文件:
int _stdcall Plus(int x,int y)
{
return x+y;
}
2.头文件:编译为导出函数
extern "C" _declspec(dllexport) __stdcall int Plus (int x,int y);
方法2
1.创建一个.def文件
EXPORTS
Plus @12 NONAME
动态链接库的使用
方式1 隐式链接
1.将 *.dll *.lib 放到工程目录下面
2.将 #pragma comment(lib,“DLL名.lib”) 添加到调用文件中
3.加入函数的声明
4.这个过程是Windows加载器完成的。
5.__declspec告诉编译器,这个函数来自另外一个DLL
extern "C" __declspec(dllimport) __stdcall int Plus (int x,int y);
方式2 显示链接
1.定义函数指针
typedef int (__stdcall *lpPlus)(int,int);
2.声明函数指针变量
lpPlus myPlus;
3.将dll加载到内存中
HINSTANCE hModule = LoadLibrary("Dym.dll");
4.获取函数的地址
myPlus = (lpPlus)GetProcAddress(hModule,(char*)0xF);
5.调用函数
int a = myPlus(10,2);
DllMain函数相关
BOOL WINAPI DllMain( HINSTANCE hinstDLL, // handle to the DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpvReserved // reserved);
第一个参数:模块加载的位置DLL本身的实例句柄
第二个参数:调用的条件
当在一个进程中创建一个线程调用DllMain的情况
进程执行(当DLL被进程 <<第一次>> 调用时,导致DllMain函数被调用)LoadLibrary->创建线程CreateThread->关闭线程->关闭调用的模块FreeLibrary