写代码的时候注意到的,以前没注意这两个函数的用法
主要区别:
LoadLibrary是把一个模块映射进调用进程的地址空间,需要时增加引用计数
而GetModuleHandle是返回一个已经映射进调用进程地址空间的模块的句柄
并不增加引用计数
使用GetModuleHandle可以判断做需要加载的模块是否已经被加载(到调用进程的地址空间).
代码1:
typedef void *(__stdcall *pfVirtualAllocEx)(unsigned long, void *, unsigned long, unsigned long, unsigned long);
pfVirtualAllocEx MyVirtualAllocEx = NULL;
MyVirtualAllocEx = (pfVirtualAllocEx)GetProcAddress(GetModuleHandle("Kernel32.dll"), "VirtualAllocEx");
代码2:
HINSTANCE hInst = LoadLibrary("User32.DLL");
typedef int (WINAPI *MSGBOX)(HWND,LPSTR,LPSTR,UINT);
MSGBOX messagebox=(MSGBOX)GetProcAddress(hInst, "MessageBoxA" );
messagebox(NULL,"123","456",MB_OK);
return 0;
多写一些案例, 会有很多不同的收获!