GetProcAddress()用法

函数功能描述:

GetProcAddress()函数检索指定的动态链接库(DLL)中的输出库函数地址。


函数原型:
FARPROC GetProcAddress(
    HMODULE   hModule,    // DLL模块句柄
    LPCSTR       lpProcName   // 函数名
);

参数:
hModule 
  [in] 包含此函数的DLL模块的句柄。LoadLibrary或者GetModuleHandle函数可以返回此句柄。
lpProcName 
  [in] 包含函数名的以NULL结尾的字符串,或者指定函数的序数值。如果此参数是一个序数值,它必须在一个字的底字节,高字节必须为0。
  
返回值:
  如果函数调用成功,返回值是DLL中的输出函数地址
  如果函数调用失败,返回值是NULL。得到进一步的错误信息,调用函数GetLastError。

注释:
  GetProcAddress()函数被用来检索在DLL中的输出函数地址。 

  lpProcName指针指向的函数名,拼写和大小写必须和DLL源代码中的模块定义文件(.DEF)中输出段(EXPORTS)中指定的相同。

Win32 API函数的输出名可能不同于你在代码中调用的这些函数名,这个不同被宏隐含在相关的SDK头文件中。如果想得到更多信息,请参考Win32函数原型(Win32 Function Prototypes)。 


  lpProcName参数能够识别DLL中的函数,通过指定一个与函数相联系的序数值(在.DEF中的EXPORTS段)。GetProcAddress函数验证那个指定的序数值是否在输出的序数1和最高序数值之间(在.DEF中)。函数用这个序数值作为索引从函数表中读函数地址,假如.DEF 文件不连续地定义函数的序数值,如从1到N(N是输出的函数序数值),错误将会发生,GetProcAddress将会返回一个错误的、非空的地址,虽然指定的序数没有对应的函数。
  为了防止函数不存在,函数应该通过名字指定而不是序数值。

要求: 
  Windows NT/2000: 要求Windows NT 3.1 或以后版本。
  Windows 95/98: 要求Windows 95 或以后版本。
  头文件: 在Winbase.h中声明,include Windows.h。
  库文件: Use Kernel32.lib。

参看:
动态链接库纵览(Dynamic-Link Libraries Overview), 动态链接库函数(Dynamic-Link Library Functions),FreeLibrary, GetModuleHandle, LoadLibrary 

示例代码:

  调用KERNEL32.DLL中的RegisterServiceProcess(仅在Windows98中适用)

  HMODULE hModule=GetModuleHandle("kernel32.dll");
  if (hModule)
  {
     typedef DWORD (CALLBACK *LPFNREGISTER)(DWORD,DWORD);
     LPFNREGISTER lpfnRegister;
     lpfnRegister=(LPFNREGISTER)GetProcAddress(hModule,"RegisterServiceProcess");
     if (lpfnRegister)
     {
       (*lpfnRegister)(NULL,1L); 
     }

  }


转于:

http://pegasus827.bokee.com/6550868.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458662.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

支付宝问题LaunchServices: ERROR: There is no registered handler for URL scheme alipay

LaunchServices: ERROR: There is no registered handler for URL scheme alipay (这句话其实是在告诉你 设备上没有安装 支付宝的客户端,此时会走网页端)而有人会发现并没有HTML5网页弹出过一会,会发现服务器返回4000支付失败,这…

C++string类常用函数 c++中的string常用函数用法总结

string类的构造函数: string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c初始化 此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2"hello";都是正…

排列与组合

话说,初一的时候看到这样一道题:有一种彩票中奖率为1%,买一百张是不是一定能中奖?答案自然是否定的,但我在想,如果有200张彩票,两张有奖,买一百张中奖率是多少?一天晚上睡…

剔除服务器返回的NSNull格式的数据

服务器返回NSNull格式的数据,真。。的烦人 解决办法:在AFN请求里面加上下面两段代码,OK AFJSONResponseSerializer *response (AFJSONResponseSerializer *)manager.responseSerializer; response.removesKeysWithNullValues YES;

显式(静态)调用: LIB + DLL + .H

1、编程时用ad.h,ad.lib,放在项目当前目录里2、在头文件中加入#include "ad.h"3、在Project Setting–>Link–>Object/library modules加入ad.lib执行时将ad.dll跟你的程序放在同一目录。 就可以直接调用dll中的函数了 当前目录 转载于:https://www.cnblogs.co…

boost Mutex

写过多线程程序的人都知道,不能让多个线程同时访问共享的资源是至关重要的。 假如一个线程试图改变共享数据的值,而另外一个线程试图去读取该共享数据的值,结果将是未定义的。 为了阻止这样的事情发生,需要用到一些非凡的原始数据…

接入支付宝出现交易订单处理失败,请稍后再试(ALI64)的错误

上次在接入支付宝的时候就碰到了交易订单处理失败,请稍后再试(ALI64)这样的错误,后来经过排查和总结,一般来讲这种问题都是公钥和私钥没有正确配置造成的。支付宝这边为了保证数据在传输时不被篡改,使用了r…

c中session的用法

c中session的用法你知道吗?下面小编就跟你们详细介绍下c中session的用法,希望对你们有用。c中session的用法如下:Session的基本属性:一、属性1、SessionIDSessionID 属性返回用户的会话标识。在创建会话时,服务器会为每…

查看硬件信息

测试机器的硬件信息: 查看CPU信息(型号) # cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 8 Intel(R) Xeon(R) CPU E5410 2.33GHz (看到有8个逻辑CPU, 也知道了CPU型号) # cat /proc/cpuinfo | grep physical …

支付宝集成交互流程

交互流程 功能流程 流程说明(以Android平台为例): 第4步:调用支付接口:此消息就是本接口所描述的开发包提供的支付对象PayTask,将商户签名后的订单信息传进pay方法唤起支付宝收银台,订单格式具体…

VxLAN基础

转自:http://blog.csdn.net/freezgw1985/article/details/16354897 一 . 为什么需要Vxlan1. vlan的数量限制4096个vlan远不能满足大规模云计算数据中心的需求2. 物理网络基础设施的限制基于IP子网的区域划分限制了需要二层网络连通性的应用负载的部署3. TOR交换机MA…

find_first_of()和 find_last_of() 【获取路径、文件名】

string 类提供字符串处理函数,利用这些函数,程序员可以在字符串内查找字符,提取连续字符序列(称为子串),以及在字符串中删除和添加。我们将介绍一些主要函数。 1.函数find_first_of()和 find_last_of() 执行简单的模式匹配&#x…

支付宝集成

memo Error Domain系统繁忙,请稍后再试 Code1000 "(null)" reslut {memo "Error Domain\U7cfb\U7edf\U7e41\U5fd9\Uff0c\U8bf7\U7a0d\U540e\U518d\U8bd5 Code1000 \"(null)\"";result "";resultStatus 4000;} 请问安装…

servlet中实现页面跳转return “r:”和return “f:

servlet中实现页面跳转return “r:”和return “f:”的区别和作用 分享| 2015-07-28 14:22741830480 | 浏览 48 次Pascal2015-07-28 14:26 #知道行家专业创造价值,火热招募中!#提问者采纳热心网友r是redirect重定向,参…

多线程编程 RW_LOCK 读写锁

RW锁 读写锁,也叫共享独占锁 互斥量 要么是锁住状态,要么是不加锁状态,而且一次只有一个线程可以对其加锁。 读写锁可以有三种状态,读模式下加锁状态,写模式下加锁状态,不加锁状态。一次只有一个线程可以占…

Error Domain=NSCocoaErrorDomain Code=3840 JSON text did not start with array or object and option

数据请求失败 报错 Error DomainNSCocoaErrorDomain Code3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo{NSDebugDescriptionJSON text did not start with array or object and option to allow fragm…

vim学习笔记(4)帮助与配置

使用帮助 在Vim中输入命令:help,即可进入帮助界面,默认是英文,可以通过以下方式安装中文帮助(以vimcdoc-1.9.0为例): 1、下载中文帮助的文件压缩包 2、解压 tar -xzvf vimcdoc-1.9.0.tar.gz 3、…

C语言程序代码优化

我认为一个好的用于科学计算的程序代码应该:算法漂亮精妙,程序简洁易懂,运算快速,节省内存。这里有的地方是矛盾的,比如简洁vs易懂,时间vs空间,找个平衡吧。目前来看时间要比空间宝贵一些。写程…

微信支付不回调支付成功的方法,这是为什么

如果你是Xcode7.2,或者IOS9.2的话,可能会遇见在微信客户端操作返回程序之后不能执行微信的onResp回调方法的问题,就是因为一下这两个方法被废弃掉了,所以我的新demo替换了一个新的方法在下面。就完美解决这个问题了(并…

如何在苹果官网下载旧版本的Xcode 方法

1 在百度里输入“苹果开发者中心“,进入以下页面。点击页面中的“Member Center" 2 出现登录界面。这是需要苹果开发者帐号的,没有帐号的可以选择“Create Apple ID”进行注册。已经注册的选择“Sign In"登录 3 页面跳转后,选择…