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函数相关推荐
- LoadLibrary函数详细说明
将指定的模块加载到调用进程的地址空间中.指定的模块可能会导致其他模块被加载.对于其他加载选项,请使用 LoadLibraryEx函数. LoadLibrary是一个宏定义: def UNICODE # ...
- dll侧加载_动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)...
动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行过程中根据需要决定应调用哪些函数. 方法是:用 LoadLibrary 函数加载动态链接库到内存,用 Ge ...
- 【转载】动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)...
原文地址:https://www.cnblogs.com/westsoft/p/5936092.html 动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行 ...
- 动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)
x动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行过程中根据需要决定应调用哪些函数. 方法是:用 LoadLibrary 函数加载动态链接库到内存,用 G ...
- 深入了解android平台的jni---注册native函数
注册native函数有两种方法:静态注册和动态注册. 1.静态注册方法 根据函数名找到对应的JNI函数:Java层调用函数时,会从对应的JNI中寻找该函数,如果没有就会报错,如果存在则会建立一个关联联 ...
- 使用CFree调用Win32 LoadLibrary 简单示例
CFree 5.0 汉化版:新建一个简单窗口程序: 此工具带有Win32 api的智能提示: Win32 API的LoadLibrary函数,功能是载入模块:下面示例载入icmp.dll:此dll位于 ...
- Android JNI_OnLoad()函数
JVM加载完本地库会调用JNI_OnLoad()函数 当Android的 VM(VirtualMachine)执行到C组件(即*so文件)里的System.loadLibrary()函数时,首先会去执 ...
- Qt调用dll中的功能函数
http://www.cnblogs.com/hicjiajia/archive/2010/08/27/1810239.html 声明: 事先我已经自己动手写了一个简单的dll文件(myDLL.dll ...
- ndk学习20: jni之OnLoad动态注册函数
一.原理 当在系统中调用System.loadLibrary函数时,该函数会找到对应的动态库, 然后首先试图找到"JNI_OnLoad"函数,如果该函数存在,则调用它 JNI_On ...
最新文章
- .gitkeep是什么? .gitignore和.gitkeep之间的区别(译)
- 促进新一代人工智能产业发展三年行动计划_浙江提出冷链物流创新发展三年行动计划 力争带动产业投资约1000亿元...
- Solr in Action 翻译完成情况
- 抢占乡镇渠道 中国手机厂商比苹果有经验
- ASP.NET MVC数据验证(上)
- 魔兽争霸3地图(WarIII Maps):三国猛兽传
- AOP(基于注解对AspectJ操作)
- 为什么全栈开发对物联网至关重要?
- 如何在C中生成随机int?
- ztree异步加载数据amp;amp;amp;amp;amp;amp;amp;amp;给父节点动态追加子节点
- android窗口动画和壁纸关系,Android壁纸管理(Android N)
- android 分辨率 720 1184 适配,墨迹天气 Android版最新!趋势界面可以横向滑动切换城市!...
- 中国城市电话区号对照表,不包括台湾
- windows 检测硬盘读写速度
- RocketMQ源码分析(十五)之文件恢复
- Python学习笔记--正方形、六边形、叠边形、同切圆的绘制
- AMD、ARM、Intel、Qualcomm
- 给大家分享几个强度很高又很好记的密码
- 机器学习——低秩矩阵分解中低秩的意义、矩阵填补、交叉验证
- 【opencv四】利用opencv读取显示视频