Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Com 使用IDL定义纯基类 当我定义IDL中的一个接口,它不从任何东西派生时,MIDL预编译器警告(Visual C++ 2008): 警告MIDL2271:[对象]接口必须派生自另一个[对象]接口,如IUnknown(…)_Com_Idl_Midl - Fatal编程技术网

Com 使用IDL定义纯基类 当我定义IDL中的一个接口,它不从任何东西派生时,MIDL预编译器警告(Visual C++ 2008): 警告MIDL2271:[对象]接口必须派生自另一个[对象]接口,如IUnknown(…)

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接口,其中一些接口会触发警告或此处描述的

如果我从另一个接口派生接口,而这个接口不是从IUnknown派生的,那么MIDL将失败:
错误MIDL2257:只能将IUnknown用作根接口(…)

现在,我的问题是:这是COM还是MIDL预编译器的一个限制

我最近一直在看D3D10头文件,D3D10.h显然是使用IDL生成的(MIDL为此添加了注释)。所有的接口都以这样或那样的方式从IUnknown派生

但是,外围设备标题(d3d10shader.h、d3d10effect.h等)包含手动定义的COM接口,其中一些接口会触发警告或此处描述的错误。我只能假设他们必须手动定义它们以避免这些限制


我说得对吗?为什么MIDL阻止纯接口?

不是从IUnknown派生的接口不是COM。这是允许内存管理和接口发现的基本构建块

可能存在不是从IUnknown派生的接口。然而,这些不是COM,它们只是一个普通指针