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

时间:2019-03-18 10:52:04

标签: windows winapi projfs

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

`

PRJ_START_DIRECTORY_ENUMERATION_CB PrjStartDirectoryEnumerationCb;

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

` 我对如何使用此功能感到困惑。

1 个答案:

答案 0 :(得分:1)

您正在查看一个回调(一个通用的编程概念,不是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
}