通知提供者目录枚举正在开始
`
PRJ_START_DIRECTORY_ENUMERATION_CB PrjStartDirectoryEnumerationCb;
HRESULT PrjStartDirectoryEnumerationCb(
const PRJ_CALLBACK_DATA *callbackData,
const GUID *enumerationId
)
{...}
` 我对如何使用此功能感到困惑。
答案 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
}