Windows API保留参数

时间:2010-12-08 21:19:07

标签: 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 lpcbData
);

我无法理解为什么lpReserved存在?我的意思是,如果保留原因,为什么要直接省略呢?

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

1 个答案:

答案 0 :(得分:11)

我至少看到两个原因。

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

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

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