GetModuleHandle和GetLibrary的区别

来源: http://blog.sina.com.cn/s/blog_4c79cc450100kgcq.html

 

GetModuleHandle和GetLibrary两个函数都可得到模块的实例句柄,但用法略有不同。
HMODULE GetModuleHandle ( LPCTSTR lpModuleName );
1、若参数是NULL,则此函数返回调用进程的实例句柄,即可认为是返回此进程的指针。
2、若参数是一个以NULL结尾的字符串,则此函数返回此字符串指定的(他应是一个DLL)动态链接库。之后就

   可用函数FindResource和LoadResource来加载资源了。
注意:函数返回的句柄是不可继承、复制。


HINSTANCE LoadLibrary( LPCTSTR lpLibFileName );
1、参数可是一个DLL的名字(字符串),然后用GetProAddress来获得函数的地址,在用后要调用函数

   FreeLibrary来释放之。
2、参数还可一个可执行文件,来获得其地址指针。
3、此函数也可加载资源。


这两个函数在加载是有些不同,
  LoadLibrary加载一个库时,若在进程中已含有此库(即已映射到进程空间中),则此库的实例句柄的引

  用记数加1,调用FreeLibrary时,其引用记数减1,当为0时,就删除此库。
  而GetModuleHandle他没有采用引用记数的技术,调用他时,若有此模块,则直接就返回此模块的句柄了。

你可能感兴趣的:(library)