Com 使用IDL定义纯基类 当我定义IDL中的一个接口,它不从任何东西派生时,MIDL预编译器警告(Visual C++ 2008): 警告MIDL2271:[对象]接口必须派生自另一个[对象]接口,如IUnknown(…)
如果我从另一个接口派生接口,而这个接口不是从IUnknown派生的,那么MIDL将失败:Com 使用IDL定义纯基类 当我定义IDL中的一个接口,它不从任何东西派生时,MIDL预编译器警告(Visual C++ 2008): 警告MIDL2271:[对象]接口必须派生自另一个[对象]接口,如IUnknown(…),com,idl,midl,Com,Idl,Midl,如果我从另一个接口派生接口,而这个接口不是从IUnknown派生的,那么MIDL将失败: 错误MIDL2257:只能将IUnknown用作根接口(…) 现在,我的问题是:这是COM还是MIDL预编译器的一个限制 我最近一直在看D3D10头文件,D3D10.h显然是使用IDL生成的(MIDL为此添加了注释)。所有的接口都以这样或那样的方式从IUnknown派生 但是,外围设备标题(d3d10shader.h、d3d10effect.h等)包含手动定义的COM接口,其中一些接口会触发警告或此处描述的
错误MIDL2257:只能将IUnknown用作根接口(…) 现在,我的问题是:这是COM还是MIDL预编译器的一个限制 我最近一直在看D3D10头文件,D3D10.h显然是使用IDL生成的(MIDL为此添加了注释)。所有的接口都以这样或那样的方式从IUnknown派生 但是,外围设备标题(d3d10shader.h、d3d10effect.h等)包含手动定义的COM接口,其中一些接口会触发警告或此处描述的错误。我只能假设他们必须手动定义它们以避免这些限制
我说得对吗?为什么MIDL阻止纯接口?不是从IUnknown派生的接口不是COM。这是允许内存管理和接口发现的基本构建块 可能存在不是从IUnknown派生的接口。然而,这些不是COM,它们只是一个普通指针