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

问题描述 投票:-6回答:1

通知提供程序目录枚举正在启动

`

PRJ_START_DIRECTORY_ENUMERATION_CB PrjStartDirectoryEnumerationCb;

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

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

windows winapi projfs
1个回答
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
}
© www.soinside.com 2019 - 2024. All rights reserved.