【Windows API学习】GetProcAddress学习
来源:互联网 发布:北京指南针软件怎么样 编辑:程序博客网 时间:2024/06/05 00:33
显式链接到 DLL 的进程调用 GetProcAddress 来获取 DLL 导出函数的地址。 使用返回的函数指针调用 DLL 函数。 GetProcAddress 将(由 LoadLibrary、AfxLoadLibrary 或GetModuleHandle 返回的)DLL 模块句柄和要调用的函数名或函数的导出序号用作参数。
由于是通过指针调用 DLL 函数并且没有编译时类型检查,需确保函数的参数是正确的,以便不会超出在堆栈上分配的内存和不会导致访问冲突。 帮助提供类型安全的一种方法是查看导出函数的函数原型,并创建函数指针的匹配 typedef。 例如:
typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);...HINSTANCE hDLL; // Handle to DLLLPFNDLLFUNC1 lpfnDllFunc1; // Function pointerDWORD 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。
- 【Windows API学习】GetProcAddress学习
- 封装GetProcAddress让Lua调用Windows API
- Windows API GetProcAddress 及demo code
- [Windows编程] 使用API函数GetProcAddress的注意事项
- Windows API学习
- Windows API学习
- windows api 学习
- Windows API 学习之一
- 学习Windows API视频学习
- Windows API学习-Hook学习
- [API学习]windows数据结构详解
- WINDOWS环境API学习--起始
- windows内核Api的学习
- windows编程之API学习
- GetProcAddress
- GetProcAddress
- GetProcAddress
- GetProcAddress
- Oracle三层嵌套分页的理解
- 【开源】博客导出工具
- liunx学习笔记第一天 用户权限管理
- Gvim C++ IDE for windows XP (Ubuntu)
- JSP中乱码的四种处理方法
- 【Windows API学习】GetProcAddress学习
- 在Eclipse中使用JUnit4进行单元测试(初级篇)
- Hadoop0.23.0初探3---HDFS NN,SNN,BN和HA
- 在Eclipse中使用JUnit4进行单元测试(中级篇)
- svn 的创建
- addTargetedDelegate:self 中的 swallowsTouches
- 《论语》全文
- 陈皓酷壳
- Hadoop0.23.0初探4---让你的第一个YARN MapReduce跑起来