#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 /…