You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在MFC应用中使用Xaml Islands时出现C2139未定义类错误如何解决?

问题解决方案

错误根因

该C2139编译错误本质是编译器处理C++/WinRT的as<>类型转换时,未找到IDesktopWindowXamlSourceNative原生COM接口的完整类型定义,属于类型未声明导致的派生错误。

修复步骤

  • 调整头文件包含顺序
    必须在引入任何C++/WinRT相关头文件前,先包含该接口的定义头文件,建议直接添加到MFC项目的预编译头(stdafx.h/pch.h)的头部,示例顺序如下:
    // 放在所有C++/WinRT头文件之前
    #include <windows.ui.xaml.hosting.desktopwindowxamlsource.h>
    #include <winrt/base.h>
    // 后续添加其他WinRT投影头、MFC相关头文件
    
  • 校验Windows SDK版本
    IDesktopWindowXamlSourceNative仅在10.0.17763.0(Windows 10 1809)及以上版本的Windows SDK中提供,可右键项目进入【属性-常规-目标平台版本】,选择符合要求的SDK版本后保存。
  • 补充全局作用域符
    该接口是原生Win32 COM接口,不存在于C++/WinRT的winrt命名空间下,调用时需要添加全局作用域符::明确指定命名空间,修改报错行代码为:
    auto interop = _desktopWindowXamlSource.as<::IDesktopWindowXamlSourceNative>();
    
  • 确认C++/WinRT支持已开启
    右键项目进入【属性-常规-C++/WinRT支持】,确认选项设置为「是」,重新生成项目触发C++/WinRT投影头的自动生成逻辑。
  • 清理缓存重编
    选择【生成-清理解决方案】,手动删除项目目录下的Generated Files文件夹后重新生成,排除旧的中间缓存文件导致的编译异常。

内容的提问来源于stack exchange,提问作者Hasan Williams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:54:03