LoadLibrary函数

随着软件规模的扩大,要求的功能也是越来越多,开发人员的参与也是越来越多。因此软件的功能划分,就成为了现代软件工程的重大任务,还有软件开发的并行性也越来越重要。为了解决这些问题,大家都会看到IT硬件发展非常迅速,功能也越来越复杂,但硬件中发展明显提高在于采用IC的方式来实现复杂的功能,也就是把大部份功能集成到一起,只要给出一些引脚就可以实现产品了。而软件中有没有相同于硬件中的IC呢?我想是应有的,就是动态连接库了。在Windows这座大厦里,很多基石就是动态连接库构成的。一个动态连接库就封装了特别复杂的功能,使用者不必关心它是怎么样实现的。当然,这样也可以让不同的开发者同时开发产品,提高软件开发的速度。要使用动态连接库里的函数,就需要使用LoadLibrary函数来加载动态连接库,使用函数GetProcAddress来获取功能函数的地址。
 
函数LoadLibrary声明如下:
 
WINBASEAPI
__out
HMODULE
WINAPI
LoadLibraryA(
    __in LPCSTR lpLibFileName
    );
WINBASEAPI
__out
HMODULE
WINAPI
LoadLibraryW(
    __in LPCWSTR lpLibFileName
    );
#ifdef UNICODE
#define LoadLibrary LoadLibraryW
#else
#define LoadLibrary LoadLibraryA
#endif // !UNICODE
 
lpLibFileName是动态连接库的名称。
 
调用函数的例子如下:
#001 //加载动态连接库。
#002  //蔡军生 2007/12/03 QQ:9073204 深圳
#003  void TestLoadDLL(void)
#004  {
#005         //加载动态连接库。
#006        HMODULE hDllLib = LoadLibrary(_T("Kernel32.dll"));
#007         if (hDllLib)
#008         {
#009               //获取动态连接库里的函数地址。
#010               FARPROC fpFun = GetProcAddress(hDllLib,"GetVersion");
#011              
#012               //调用函数运行。
#013               DWORD dwVersion = (*fpFun)();
#014              
#015               //获取WINDOWS的版本。
#016               DWORD dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
#017               DWORD dwWindowsMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
#018              
#019               //显示。
#020               const int nBufSize = 512;
#021               TCHAR chBuf[nBufSize];
#022               ZeroMemory(chBuf,nBufSize);
#023
#024               wsprintf(chBuf,_T("显示版本:%d,%d\r\n"),
#025                    dwWindowsMajorVersion,dwWindowsMinorVersion);
#026               OutputDebugString(chBuf);
#027
#028               //释放动态连接库。
#029               FreeLibrary(hDllLib);
#030         }
#031        
#032  }

LoadLibrary函数相关推荐

  1. LoadLibrary函数详细说明

    将指定的模块加载到调用进程的地址空间中.指定的模块可能会导致其他模块被加载.对于其他加载选项,请使用 LoadLibraryEx函数. LoadLibrary是一个宏定义: def UNICODE # ...

  2. dll侧加载_动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)...

    动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行过程中根据需要决定应调用哪些函数. 方法是:用 LoadLibrary 函数加载动态链接库到内存,用 Ge ...

  3. 【转载】动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)...

    原文地址:https://www.cnblogs.com/westsoft/p/5936092.html 动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行 ...

  4. 动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)

    x动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行过程中根据需要决定应调用哪些函数. 方法是:用 LoadLibrary 函数加载动态链接库到内存,用 G ...

  5. 深入了解android平台的jni---注册native函数

    注册native函数有两种方法:静态注册和动态注册. 1.静态注册方法 根据函数名找到对应的JNI函数:Java层调用函数时,会从对应的JNI中寻找该函数,如果没有就会报错,如果存在则会建立一个关联联 ...

  6. 使用CFree调用Win32 LoadLibrary 简单示例

    CFree 5.0 汉化版:新建一个简单窗口程序: 此工具带有Win32 api的智能提示: Win32 API的LoadLibrary函数,功能是载入模块:下面示例载入icmp.dll:此dll位于 ...

  7. Android JNI_OnLoad()函数

    JVM加载完本地库会调用JNI_OnLoad()函数 当Android的 VM(VirtualMachine)执行到C组件(即*so文件)里的System.loadLibrary()函数时,首先会去执 ...

  8. Qt调用dll中的功能函数

    http://www.cnblogs.com/hicjiajia/archive/2010/08/27/1810239.html 声明: 事先我已经自己动手写了一个简单的dll文件(myDLL.dll ...

  9. ndk学习20: jni之OnLoad动态注册函数

    一.原理 当在系统中调用System.loadLibrary函数时,该函数会找到对应的动态库, 然后首先试图找到"JNI_OnLoad"函数,如果该函数存在,则调用它 JNI_On ...

最新文章

  1. .gitkeep是什么? .gitignore和.gitkeep之间的区别(译)
  2. 促进新一代人工智能产业发展三年行动计划_浙江提出冷链物流创新发展三年行动计划 力争带动产业投资约1000亿元...
  3. Solr in Action 翻译完成情况
  4. 抢占乡镇渠道 中国手机厂商比苹果有经验
  5. ASP.NET MVC数据验证(上)
  6. 魔兽争霸3地图(WarIII Maps):三国猛兽传
  7. AOP(基于注解对AspectJ操作)
  8. 为什么全栈开发对物联网至关重要?
  9. 如何在C中生成随机int?
  10. ztree异步加载数据amp;amp;amp;amp;amp;amp;amp;amp;给父节点动态追加子节点
  11. android窗口动画和壁纸关系,Android壁纸管理(Android N)
  12. android 分辨率 720 1184 适配,墨迹天气 Android版最新!趋势界面可以横向滑动切换城市!...
  13. 中国城市电话区号对照表,不包括台湾
  14. windows 检测硬盘读写速度
  15. RocketMQ源码分析(十五)之文件恢复
  16. Python学习笔记--正方形、六边形、叠边形、同切圆的绘制
  17. AMD、ARM、Intel、Qualcomm
  18. 给大家分享几个强度很高又很好记的密码
  19. 机器学习——低秩矩阵分解中低秩的意义、矩阵填补、交叉验证
  20. 【opencv四】利用opencv读取显示视频

热门文章

  1. 微信小程序发送模板消息踩的坑
  2. 意甲-米兰3-0胜 卡卡两球一助攻达百球里程碑
  3. 金蝶K3软件系统在Win2003环境的设置指南
  4. 第一章:随即分析中必会的基础知识
  5. 企业培训考试、知识竞赛、考评考核,倾力支持
  6. jQuery——02
  7. 高完整性系统工程(四): Checking Formal Specifications
  8. Rust FFI 与C语言互相调用
  9. 2.2.2新版Banner轮播图实现
  10. 某中心医院网络搭建(计算机网络规划设计)