将指定的模块加载到调用进程的地址空间中。指定的模块可能会导致其他模块被加载。对于其他加载选项,请使用 LoadLibraryEx函数。

LoadLibrary是一个宏定义:

def UNICODE
#define LoadLibrary  LoadLibraryW
#else
#define LoadLibrary  LoadLibraryA
#endif // !UNICODE
HMODULE WINAPI LoadLibrary(_In_ LPCTSTR lpFileName
);

入参说明:

lpFileName [in]
模块的名称。这可以是库模块(.dll文件)或可执行模块(.exe文件)。指定的名称是模块的文件名,与模块定义(.def)文件中的LIBRARY关键字所指定的与库模块本身中存储的名称无关。
如果字符串指定完整路径,则该函数仅搜索该模块的路径。
如果字符串指定一个没有路径的模块名称或者相对路径,则该函数使用标准搜索策略来查找模块;
如果该功能找不到该模块,则该功能失败。

指定路径时,一定要使用反斜杠(\),而不是正斜杠(/)。
如果字符串指定了没有路径的模块名称,并且省略了文件扩展名,则函数会将缺省库扩展名.dll附加到模块名称。要防止函数将.dll附加到模块名称,请在模块名称字符串中包含尾随点字符(.)。
---------------------

返回值:

如果函数成功,则返回值是模块的句柄。

如果函数失败,则返回值为NULL。要获得扩展错误信息,请调用 GetLastError

-----------------------------------------------------------------------------------------------------------------

__stdcall约定

如果通过VC++编写的DLL欲被其他语言编写的程序调用,应将函数的调用方式声明为__stdcall方式,WINAPI都采用这种方式,而C/C++缺省的调用方式却为__cdecl。__stdcall方式与__cdecl对函数名最终生成符号的方式不同。若采用C编译方式(在C++中需将函数声明为extern "C"),__stdcall调用约定在输出函数名前面加下划线,后面加“@”符号和参数的字节数,形如_functionname@number;而__cdecl调用约定仅在输出函数名前面加下划线,形如_functionname。

Windows编程中常见的几种函数类型声明宏都是与__stdcall和__cdecl有关的(节选自windef.h):
#define CALLBACK __stdcall //这就是传说中的回调函数

#define WINAPI __stdcall //这就是传说中的WINAPI

#define WINAPIV __cdecl

#define APIENTRY WINAPI //DllMain的入口就在这里

#define APIPRIVATE __stdcall

#define PASCAL __stdcall

在lib.h中,应这样声明add函数:
int __stdcall add(int x, int y);

在应用工程中函数指针类型应定义为:
typedef int(__stdcall *lpAddFun)(int, int);

若在lib.h中将函数声明为__stdcall调用,而应用工程中仍使用typedef int (* lpAddFun)(int,int),运行时将发生错误(因为类型不匹配,在应用工程中仍然是缺省的__cdecl调用),弹出如图7所示的对话框。

错误为:the value of ESP was not properly saved across afunction call...

LoadLibrary函数详细说明相关推荐

  1. python max函数_Python max内置函数详细介绍

    Python max内置函数 max(iterable, *[, key, default]) max(arg1, arg2, *args[, key]) Return the largest ite ...

  2. 轮廓处理函数详细(转)

    轮廓处理函数详细 ApproxChains 用多边形曲线逼近 Freeman 链 CvSeq* cvApproxChains( CvSeq* src_seq, CvMemStorage* storag ...

  3. pythonrange函数用法_python range()函数详细用法

    python range()函数详细用法 函数原型:range(start, end, scan): 参数含义:start:计数从start开始.默认是从0开始.例如range(5)等价于range( ...

  4. MySQL 储存过程-原理、语法、函数详细说明

    2019独角兽企业重金招聘Python工程师标准>>> Mysql储存过程是一组为了完成特定功能的SQL语句集,经过编译之后存储在数据库中,当需要使用该组SQL语句时用户只需要通过指 ...

  5. c语言的point函数,C语言中friend友元函数详细解析

    C语言中friend友元函数详细解析 友元函数是可以直接访问类的私有成员的非成员函数.它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字frien ...

  6. c语言signal函数详细说明

    c语言中singal函数详细解释说明 对于信号处理函数位于<sys/singal.h>中 void (*signal(int sig,void(*handler)(int))) (int) ...

  7. c语言中signal函数详细解释说明

    c语言中signal函数详细解释说明     对于 信号处理函数 位于 <signal.h> 中. void ( *signal( int sig, void (* handler)( i ...

  8. linux下的fgetc()与fputc()函数详细介绍及代码演示

    linux下的标准I/O的fgetc()与fputc()函数详细介绍及代码演示 文章目录 前言 一.fgetc()用法介绍 二.fputc()用法介绍 代码演示 总结 前言 在C语言中,读写文件比较灵 ...

  9. 【SemiDrive源码分析】【X9芯片启动流程】30 - AP1 Android Kernel 启动流程 start_kernel 函数详细分析(一)

    [SemiDrive源码分析][X9芯片启动流程]30 - AP1 Android Kernel 启动流程 start_kernel 函数详细分析(一) 一.Android Kernel 启动流程分析 ...

最新文章

  1. findall与match、search区别及小括号的注意事项
  2. ssm学习之ssm框架详解
  3. Asp.Net Core Blazor之容器部署
  4. Android9怎么截图,华为mate9怎么截图/截屏 华为mate9多种截屏方法图文教程
  5. Knime 发送邮件
  6. 薛定谔的猫,薛定谔的猫可怕在哪里?
  7. 数据结构Data Structure in C++ 胡学钢 全书梳理(备忘自用 已完结)
  8. Unity Shader 实现PS图层混合效果
  9. 华为p40pro android11,华为P40Pro上手对比iPhone11Pro:差距拉开、黑马逆袭!
  10. 免费开源的图片修复工具Lama Cleaner
  11. 车载OS的战场:万亿美金入口之争
  12. 如果你是一个C++面试官,你会问哪些问题?
  13. MyEclipse下使用xdoclet自动生成hdm文件
  14. 微信朋友圈python广告评论_【Python】我的微信朋友圈分析
  15. 关于网络时间协议(NTP)mod-6扫描漏洞处理
  16. NumPy常用函数(7)-- 计算股票收益率和波动率
  17. 单片机考试及答案c语言版,51单片机期末考试试卷及答案
  18. 【Redis】Redis 高并发处理策略
  19. tp5.1多域名多模块设置
  20. 服务器安全保护的具体措施

热门文章

  1. 用Excel玩转三维地球!
  2. 红米 android 6.0下载地址,小米真是诚意!红米手机马上能用上安卓6.0的MIUI
  3. Mesa代码结构分析
  4. 获取距离某个坐标点最近的几个坐标(计算距离)
  5. 网站更换完服务器多久生效,域名DNS切换后多久生效?
  6. fcpx:Twixtor Pro 7 for Mac(超级慢动作变速插件)下载
  7. JS 判断手机端跳转
  8. STM32F4-SPI
  9. Python基础-Python基础使用
  10. 如何才能提高人生的成功率?