Зарезервированные параметры Windows API

#windows #winapi #parameters

#Windows #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
);
  

Я не могу понять, почему существует lpReserved? Я имею в виду, если это зарезервировано, зачем его помещать, не было бы проще напрямую опустить это?

Спасибо! 🙂 (не обращайте внимания на мой английский, пожалуйста ..)

Ответ №1:

Я вижу как минимум две причины.

Одним из них может быть то, что этот параметр зарезервирован для будущего использования и возможного расширения функциональности. Если убедиться, что для него установлено значение NULL , это может в некоторой степени гарантировать, что в будущем, когда будет добавлена новая функциональность, старые программы не будут ломаться.

Вторая возможная причина заключается в том, что этот параметр фактически может использоваться внутри как часть частного API, а общедоступная часть API требует установить этот параметр равным NULL .

Почему бы не опустить это вообще? Впоследствии гораздо проще расширить функциональность системы без изменения интерфейса. Он остается бинарным, а исходный код совместим со старым API и не требует перестройки старого программного обеспечения.

Комментарии:

1. Есть еще одна причина, по которой вы пропустили: при создании API поле lpReserved использовалось для чего-то другого, со временем поле стало ненужным. Вместо изменения подписи API (что привело бы к сбою всех существующих клиентов) владелец API просто решил сделать поле «зарезервированным».

2. @Larry: Спасибо, вы правы. Однако, чтобы быть точным, я не сказал, что это все причины. Вы не возражаете, если я добавлю это к ответу?

3. Я нутром чувствую, что объяснение @ Larry является наиболее распространенной причиной этих параметров.

4. @Steve Я надеялся, что @Larry вернется и уточнит, учитывая его глубокие знания Win32

5. @David: На самом деле у меня нет никаких хороших историй по этому конкретному примеру. Но пару лет назад я привел еще один пример: blogs.msdn.com/b/larryosterman/archive/2007/02/07 /…