GetProcAddress函数
来源:互联网 发布:sql中文查询设计器 编辑:程序博客网 时间:2024/06/05 22:29
显式链接到 DLL 的进程调用 GetProcAddress 来获取 DLL 导出函数的地址。使用返回的函数指针调用 DLL 函数。GetProcAddress 将(由 LoadLibrary、AfxLoadLibrary 或 GetModuleHandle 返回的)DLL 模块句柄和要调用的函数名或函数的导出序号用作参数。
由于是通过指针调用 DLL 函数并且没有编译时类型检查,需确保函数的参数是正确的,以便不会超出在堆栈上分配的内存和不会导致访问冲突。帮助提供类型安全的一种方法是查看导出函数的函数原型,并创建函数指针的匹配 typedef。例如:
typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);
...
HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
DWORD dwParam1;
UINT uParam2, uReturnVal;
hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
"DLLFunc1");
if (!lpfnDllFunc1)
{
// handle the error
FreeLibrary(hDLL);
return SOME_ERROR_CODE;
}
else
{
// call the function
uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
}
}
...
HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
DWORD dwParam1;
UINT uParam2, uReturnVal;
hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
"DLLFunc1");
if (!lpfnDllFunc1)
{
// handle the error
FreeLibrary(hDLL);
return SOME_ERROR_CODE;
}
else
{
// call the function
uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
}
}
调用 GetProcAddress 时指定所需函数的方式取决于 DLL 的生成方式。
仅当要链接到的 DLL 是用模块定义 (.def) 文件生成的,并且序号在 DLL 的 .def 文件的 EXPORTS 部分中与函数一起列出时,才能获取导出序号。如果 DLL 具有许多导出函数,则相对于使用函数名,使用导出序号调用 GetProcAddress 的速度稍快一些,因为导出序号是 DLL 导出表的索引。使用导出序号,GetProcAddress 可直接定位函数,而不是将指定名称与 DLL 导出表中的函数名进行比较。但是,仅当有权控制 .def 文件中导出函数的序号分配时,才应使用导出序号调用 GetProcAddress。
- GetProcAddress函数
- GetProcAddress函数
- 自定义实现GetProcAddress函数
- GetProcAddress函数用法
- GetProcAddress()、函数指针和 C++
- 用ASM实现GetProcAddress()函数
- GetProcAddress函数实现和分析
- GetProcAddress
- GetProcAddress
- GetProcAddress
- GetProcAddress
- GetProcAddress
- GetProcAddress
- GetProcAddress
- GetProcAddress()
- 使用API函数GetProcAddress的注意事项
- 使用API函数GetProcAddress的注意事项
- 完美实现自己的GetProcAddress函数
- 中国经济的真相(转)
- 采用WAVECOM模块组装-串口的终端GSM MODEM,性能稳定.短信发送量最快可达600条/小时,比用手机发送短信更稳定、快捷。该设备广泛应用于企业短信广告、短信通知、短信查询、短信监控等领域。
- GCC-3.4.6源代码学习笔记(126)
- ADO.NET学习摘记5
- hdu 1452 Happy 2004
- GetProcAddress函数
- 中国互联网“第一次世界大战”
- Studying note of GCC-3.4.6 source (126)
- POJ 1006 Biorhthms
- Shell实现Unix进程间信息交换的几种方法(转)
- 在MDK平台下调试mini2440
- GPRS MODEM池,是一款集成4-8口的彩信收发设备,主要针对高端及彩信需求量大的客户,插入移动运营商的4-8张手机SIM卡后,对外可以与移动运营商的短信中心建立无线连接,对内通过与PC的连接可以让计算机应用系统实现自由的彩信/短信收发。
- FirefoxProtable 非常好用的便携的。
- 有名管道