Согласно 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, поэтому они внесли свою путаницу.
Например, они используют комбинацию типов аргументов BSTR (автоматизация) и LPCWSTR (необработанный) в одном и том же интерфейсе (например, IVssBackupComponents), что очень странно.
Это COM, необработанный COM, потому что COM по сути очень прост. Вы можете определить виртуальную таблицу COM разными способами, с любым языком, в этом ее прелесть (не говоря уже об IDispatch, библиотеках типов, MIDL, многопоточности, реестре, фабриках классов, вне процесса, маршалировании и т. д.).
Для другого примера необработанного COM посмотрите на DirectX: Программирование DirectX с COM хорошо написан и говорит о том, что они называют «необработанным COM».
Немного коряво изложено то, что вам пытаются сказать, что у вас не будет никакой надежды на использование интерфейса, скажем, скриптового клиента. Это не интерфейс IDispatch, и для него нет библиотеки типов. Только программе на C++ будет легко с ним работать. Вы можете получить определение, только #включая vbackup.h, и оно записывается с использованием ключевого слова сорт. Это не делает полностью невозможным его использование на другом языке, например, C# может это сделать, но вам придется тщательно написать объявление интерфейса, чтобы оно соответствовало. В остальном необычно.