导入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
相关产品推荐
相关产品推荐

