通知提供程序目录枚举正在启动
`
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
}