Windows API保留参数

Bla*_*ear 5 windows parameters winapi

我想知道为什么有些函数有一些参数必须设置为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
);
Run Code Online (Sandbox Code Playgroud)

我不明白为什么lpReserved存在?我的意思是,如果它保留了为什么要放它,直接省略它会不会更简单?

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

det*_*zed 11

我看到至少有两个原因.

一个是该参数保留供将来使用和可能的功能扩展.确保它设置为NULL可以在某种程度上保证在将来添加新功能时它不会破坏旧程序.

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

为什么不完全省略它?以后在不改变界面的情况下扩展系统功能会容易得多.它保持二进制和源代码与旧API兼容,并且不需要重建旧软件.

  • 您错过了另一个原因:创建API时,lpReserved字段用于其他内容,随着时间的推移,该字段变得不必要或不需要.API所有者只需选择使字段"保留",而不是更改API签名(这会破坏所有现有客户端). (10认同)
  • 我的直觉是@ Larry的解释是这些参数最常见的原因. (2认同)