在 WinAPI 中所有大写的函数名称是什么意思?

What does all capitalized Function name means in WinAPI?

通知提供商目录枚举正在开始

`

PRJ_START_DIRECTORY_ENUMERATION_CB PrjStartDirectoryEnumerationCb;

HRESULT PrjStartDirectoryEnumerationCb(
  const PRJ_CALLBACK_DATA *callbackData,
  const GUID *enumerationId
)
{...}

` 我很困惑如何使用这个功能。

您正在查看回调(一种通用编程概念,并非特定于 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
}