Вы смотрите на обратный вызов (общая концепция программирования, не специфичная для Win32), которая обычно является ссылкой на функцию, которую вы должны написать самостоятельно.Чтобы компилятор C / C ++ проверил, что вы правильно определили свою функцию обратного вызова, и чтобы упростить использование таких обратных вызовов, часто используется typedef
.Win32 API часто использует все заглавные буквы для определения типов обратных вызовов.В этом случае PRJ_START_DIRECTORY_ENUMERATION_CB
- это тип указателя на функцию (указатель на функцию обратного вызова, которую вы должны написать), и он определяется в projectedfslib.h
как:
typedef
_Function_class_(PRJ_START_DIRECTORY_ENUMERATION_CB)
HRESULT
(CALLBACK PRJ_START_DIRECTORY_ENUMERATION_CB)(
_In_ const PRJ_CALLBACK_DATA* callbackData,
_In_ const GUID* enumerationId
);
Это определение имеетв нем много лишних вещей, которые помогают набору инструментов Microsoft проверять различные вещи, связанные с использованием этого типа указателя на функцию.При написании вашей собственной функции, которая работает для этого типа обратного вызова, вам не обязательно повторять много вещей, которые используются в typedef
.Документация MSDN для обратных вызовов часто показывает пример того, как вы бы написали сигнатуру метода для вашего обратного вызова, и этот пример обычно упрощается, чтобы убрать лишние вещи, необходимые для набора инструментов, оставляя вещи, которые разработчик должен определить при написании своего обратного вызова.
В этом случае примерная функция называется PrjStartDirectoryEnumerationCb
, но функции с таким именем не определено.Вы должны определить функцию, которая выглядит так, как вы видите в MSDN.У него не должно быть одинакового имени - вы можете назвать его как угодно, а затем использовать имя своей функции везде, где требуется обратный вызов.
HRESULT MyCallback(const PRJ_CALLBACK_DATA *callbackData, const GUID* enumerationId)
{
// implement your callback here
}