无法引用 WinRT C++ 库中 Win32 头文件(外部依赖项中的 .h 文件)中完成的 typedef 结构定义

Unable to refer to typedef struct definitions done in Win32 Header files (.h files in External dependencies) from WinRT C++ Library

当从 WinRT C++ 库中使用时,无法引用在 Win32 头文件(外部依赖项中的 .h 文件)中完成的 typedef 结构定义

#include <mfplay.h>
#pragma comment(lib,"Mfplay.lib") 
class MediaPlayerCallback //: public IMFPMediaPlayerCallback
{
long m_cRef; // Reference count
MFP_EVENT_HEADER H;
};

MFP_EVENT_HEADER 是在 MFPlay.h 中定义的 typedef 结构,在 VS2019 中执行 Go to the definition 将我带到 MFPlay.h definition 中的定义,但代码无法编译

但我尝试在我创建的 .h 文件中创建一个 typedef 结构,并且我能够毫无问题地编译它。

我的疑问是为什么我在MFPlay.h中定义时无法编译,而在我定义的头文件中定义时却可以编译。

我遇到的错误

MediaPlayerCallback.h(11,22): error C3646: 'H': unknown override specifier
MediaPlayerCallback.h(11,23): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

Minimum Reproducible

已经尝试过- 在 win32 桌面应用程序上尝试了相同的代码,我能够毫无问题地进行编译,但是当从 WinRT C++ 库执行相同的操作时出现此问题

如评论中所述,问题是 MFP_EVENT_HEADER 类型位于 WINAPI_FAMILY_DESKTOP_APP API 分区中,但 不是 UWP 应用程序支持 WINAPI_FAMILY_APP API 分区。根据 Microsoft Docs 这种类型被标记为“[仅限桌面应用]”。

IMFPMediaPlayerCallback 也是“仅限桌面应用程序”。这是因为此 API 被认为已弃用 Microsoft Docs. The recommendation is to use Media Session API,尽管 IMFMediaSession 也是 仅桌面界面。

对于 UWP,已找到 API 支持的媒体基础列表 here. There is also the Windows.Media Windows Runtime API surface. I recommend starting with Audio, video, and camera 并查看您的方案支持的内容。