2

当我在 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 会阻止纯接口?

4

1 回答 1

2

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

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

于 2008-12-22T10:36:05.887 回答