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

导入oaidl/ocidl.idl引发MIDL2003重定义错误求解决

解决VS2022编译IDL时的MIDL2003重定义错误

针对你遇到的_FLAGGED_WORD_BLOB和IUnknown重定义错误,核心原因是显式导入oaidl.idl/ocidl.idl与WinUI组件的元数据定义冲突,以下是可行的解决步骤:

  • 替换基础IDL导入语句
    移除代码开头的import "oaidl.idl";和import "ocidl.idl";,替换为WinRT统一元数据导入:

    import "windows.winmd";
    

    windows.winmd已经包含了oaidl/ocidl中的核心类型定义,同时兼容Microsoft.UI.Xaml.Window这类WinUI组件的依赖,不会产生重复定义。

  • 保留类型库导入
    继续保留library MyLib块中的importlib("stdole32.tlb");和importlib("stdole2.tlb");,这两个是OLE类型库的引用,用于支持COM相关功能,不会和WinRT元数据冲突。

  • 修改后的完整IDL示例

    import "windows.winmd";
    
    namespace MyNameSpace
    {
        [default_interface]
        runtimeclass Dummy : Microsoft.UI.Xaml.Window
        {
            Dummy();
        };
        [
            uuid(079fb898-e9a5-48b6-a3b9-af6a54c7488a),
            version(1.0)
        ]
        library MyLib
        {
            importlib("stdole32.tlb");
            importlib("stdole2.tlb");
            typedef enum OP {
                NONE,
                LT,
                GT,
                EQ,
                ABLT,
                ABGT,
                ABEQ
            } OP;
        };
    }
    

修改后重新编译,即可消除MIDL2003错误,同时满足项目对OLE/COM类型的依赖需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:12:42