LoadLibrary和GetModuleHandle的区别

写代码的时候注意到的,以前没注意这两个函数的用法

主要区别:

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;

多写一些案例, 会有很多不同的收获!


原文链接: LoadLibrary和GetModuleHandle的区别 版权所有,转载时请注明出处,违者必究。
注明出处格式:流沙团 ( http://gyarmy.com/post-392.html )

发表评论

0则评论给“LoadLibrary和GetModuleHandle的区别”