IVssExamineWriterMetadata 的 C++ 和 COM 接口有什么区别?

What is distinction between a C++ and COM interface for IVssExamineWriterMetadata?

根据https://docs.microsoft.com/en-us/windows/desktop/api/vsbackup/nl-vsbackup-ivssexaminewritermetadata

The IVssExamineWriterMetadata interface is a C++ (not COM) interface that allows a requester to examine the metadata of a specific writer instance. This metadata may come from a currently executing (live) writer, or it may have been stored as an XML document.

我看到的所有代码都将其视为 COM 接口。

在我看来,定义类似于 COM。

https://github.com/candera/hobocopy/blob/master/inc/winxp/vsbackup.h#L91

这里有什么区别?它是否以某种记录的方式违反了 COM 接口设计规则?

我的猜测是编写此代码、文件和相关文档的人可能不知道 COM 是什么,所以他们带来了自己的困惑。

例如,他们在同一接口(例如 IVssBackupComponents)中使用 BSTR(自动化)和 LPCWSTR(原始)参数类型的组合,这很奇怪。

这是 COM,原始 COM,因为 COM 本质上非常简单。您可以使用任何语言以多种方式定义 COM vtable,这就是它的美妙之处(更不用说 IDispatch、类型库、MIDL、线程、注册表、class 工厂、out-of-process、封送处理、等)。

对于另一个原始 COM 示例,请查看 DirectX:Programming DirectX with COM 写得很好并且谈论他们所说的 "raw COM" 是什么。