当我在IDL中定义一个不是从任何东西派生的接口时,MIDL预编译器会发出警告(Visual C ++ 2008):
警告MIDL2271:[object]接口必须从另一个[object]接口派生,例如IUnknown(...)
如果我从不是从IUnknown派生的另一个派生我的界面,则MIDL失败:
错误MIDL2257:只有IUnknown可以用作根接口(...)
现在,我的问题:这是COM或MIDL预编译器的限制吗?
我最近一直在查看D3D10标题,显然已经使用IDL生成了d3d10.h(MIDL为此效果添加了注释)。并且所有接口都以某种方式从IUnknown派生。
但是,外设头文件(d3d10shader.h,d3d10effect.h等)包含手动定义的COM接口,其中一些会触发警告或此处描述的错误。我只能假设他们必须手动定义它们以避免这些限制。
我是对的吗?为什么MIDL会阻止纯接口?
答案 0 :(得分:2)
不是从IUnknown派生的接口不是COM。这是允许内存管理和界面发现的基本构建块。
可能存在不是从IUnknown派生的接口。但是那些不是COM,它们只是一个普通的指针。