在MFC应用程序中使用xaml岛时,不允许获取错误C2139未定义的类



我正在尝试使用Xaml Islands将WinUI控件嵌入到遗留的C++MFC应用程序中。我以C++桌面(Win32(应用程序中的Host自定义WinRT XAML控件为指南。我的MFC应用程序一直编译到我遵循";在桌面项目"中托管自定义WinRT XAML控件;部分。当我引用IDesktopWindowXamlSourceNative并编译我的应用程序时,我得到了以下错误。

// Line with C2139 error
auto interop = _desktopWindowXamlSource.as<IDesktopWindowXamlSourceNative>();

生成错误:

**\Generated Files\winrt\base.h(1981,53(:错误C2139:IDesktopWindowXamlSourceNative:不允许将未定义的类作为编译器内部类型特征__is_base_of的参数

我已经成功地完成了教程示例,但当我将这些步骤应用于我们的传统MFC应用程序时,它并没有编译。我不确定问题出在哪里。

当我尝试在项目中的现有MFC DLL中使用XAML控件时,发生了这种情况。

现有的MFC DLL是扩展DLL,它依赖于一堆其他MFC DLL;常规的";dll,而没有调用AfxInitExtensionModule或";新CDynLinkLibrary(dll_name(";。

因此,为了解决这个问题,我创建了新的";MFC扩展DLL";在我的项目中。然后添加了对WinUI MyApp项目的引用,并使用以下设置重新解决链接错误

..\bin\Debug\$(AppProjectName(\$(AppProjectName(.winmdtrue

我遇到了同样的错误。在我的案例中,原因是NTDDI_VERSION宏的值,即NTDDI_VISTA

我发现的解决方案是创建一个只包含WinRT的标头,在这个标头的开头我做了:

#define NTDDI_VERSION NTDDI_WIN10_19H1

并且在文件I的末尾将NTDDI_ VERSION恢复到初始值。

最新更新