当我在 IDL 中定义一个不从任何东西派生的接口时,MIDL 预编译器会发出警告(Visual C++ 2008):
警告 MIDL2271:[object] 接口必须派生自另一个 [object] 接口,例如 IUnknown (...)
如果我从另一个不是从 IUnknown 派生的接口派生我的接口,MIDL 将失败:
错误 MIDL2257:只有 IUnknown 可以用作根接口(...)
现在,我的问题是:这是 COM 或 MIDL 预编译器的限制吗?
我最近一直在看D3D10的头文件,d3d10.h显然是使用IDL生成的(MIDL为此添加了注释)。并且所有接口都以一种或另一种方式派生自 IUnknown。
但是,外围头文件(d3d10shader.h、d3d10effect.h 等)包含手动定义的 COM 接口,其中一些会触发此处描述的警告或错误。我只能假设他们必须手动定义它们以避免这些限制。
我对吗?为什么 MIDL 会阻止纯接口?