Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows API保留参数_Windows_Winapi_Parameters - Fatal编程技术网

Windows API保留参数

Windows API保留参数,windows,winapi,parameters,Windows,Winapi,Parameters,我想知道为什么有些函数有一些参数必须设置为NULL,因为“保留参数”。例如: LONG WINAPI RegQueryValueEx( __in HKEY hKey, __in_opt LPCTSTR lpValueName, __reserved LPDWORD lpReserved, __out_opt LPDWORD lpType, __out_opt LPBYTE lpData, __inout_opt LPDWORD l

我想知道为什么有些函数有一些参数必须设置为NULL,因为“保留参数”。例如:

LONG WINAPI RegQueryValueEx(
  __in         HKEY hKey,
  __in_opt     LPCTSTR lpValueName,
  __reserved   LPDWORD lpReserved,
  __out_opt    LPDWORD lpType,
  __out_opt    LPBYTE lpData,
  __inout_opt  LPDWORD lpcbData
);
我不明白为什么会有这种情况?我的意思是,如果它是保留的,为什么要把它放进去,直接省略它不是更简单吗


谢谢!:)(请不要理我的英语。)

我至少看到两个原因

一种可能是,此参数保留供将来使用和可能的功能扩展。确保将其设置为
NULL
可以在一定程度上保证将来添加新功能时不会中断旧程序

第二个可能的原因是该参数实际上可以作为私有API的一部分在内部使用,而API的公共部分要求将该参数设置为
NULL


为什么不把它全部省略呢?以后在不更改界面的情况下扩展系统的功能要容易得多。它与旧API保持二进制和源代码兼容,并且不需要重新生成旧软件。

还有一个您遗漏的原因:创建API时,lpReserved字段用于其他用途,随着时间的推移,该字段变得不必要或不需要。API所有者没有更改API签名(这会破坏所有现有客户端),而是选择将字段设置为“保留”。@拉里:谢谢,你说得对。确切地说,我并没有说这些都是原因。你介意我在答案中加上这个吗?我的直觉是,@Larry的解释是这些参数最常见的原因。@Steve我希望,@Larry会回来详细解释,因为他对这些参数非常了解Win32@David当前位置我没有任何关于这个例子的好故事。但我在几年前还做过另一个例子: