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

C++/WinRT编译MIDL2011错误:INotifyPropertyChanged无法解析

解决C++/WinRT中MIDL2011无法解析INotifyPropertyChanged的问题

问题原因

MIDL编译器找不到Microsoft.UI.XAML.Data.INotifyPropertyChanged的定义,通常是因为IDL未导入WinUI相关元数据,或是项目缺少必要的WinUI引用。

解决步骤

  • 步骤1:在IDL开头导入WinUI数据模块
    在IDL文件最顶部添加导入语句,让MIDL能定位到INotifyPropertyChanged的定义:

    import "Microsoft.UI.Xaml.Data.idl";
    

    也可以导入完整的WinUI模块:

    import "Microsoft.UI.Xaml.idl";
    
  • 步骤2:确保项目引用WinUI 3元数据
    右键项目→属性→配置属性→C/C++→常规,确认附加包含目录中已添加WinUI头文件路径;同时检查链接器→输入,确认引用了Microsoft.UI.Xaml.lib(桌面应用)或对应WinUI库文件。

  • 步骤3:补全INotifyPropertyChanged的事件声明
    继承INotifyPropertyChanged的runtimeclass必须声明PropertyChanged事件,否则编译会报错。修改后的完整IDL如下:

    import "Microsoft.UI.Xaml.Data.idl";
    
    namespace Clankboard
    {
        runtimeclass SoundlistItem : Microsoft.UI.XAML.Data.INotifyPropertyChanged
        {
            SoundlistItem(String soundName, String soundLocation, String soundLocationIcon, String soundKeybind, Boolean progressRingEnabled, String KeybindBtnForecolor);
            String SoundName;
            String SoundLocation;
            String SoundLocationIcon;
            String SoundKeybind;
            Boolean ProgressRingEnabled;
            String KeybindBtnForecolor;
            event Windows.Foundation.TypedEventHandler<SoundlistItem, Windows.UI.Xaml.Data.PropertyChangedEventArgs> PropertyChanged;
        }
    }
    

    注:PropertyChangedEventArgs属于Windows.UI.Xaml.Data命名空间,WinUI 3兼容该命名空间的类型。

  • 步骤4:恢复正确的命名空间前缀
    Microsoft.UI.XAML.Data.INotifyPropertyChanged是WinUI 3的正确命名空间,换成Windows前缀对应UWP旧版本类型,不适用于当前WinUI 3项目,无需替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:35:02