See the question and my original answer on StackOverflow

My guess is the guy(s) who wrote this code, file and the associated doc probably didn't know what COM is, so they brought their own confusion in.

For example, they use a combination of BSTR (Automation) and LPCWSTR (raw) argument types, in the same interface (IVssBackupComponents for exemple), which is very odd.

This is COM, raw COM, because COM is essentially very simple. You can define a COM vtable in many ways, with any language, this is the beauty of it (not talking of IDispatch, type libraries, MIDL, threading, registry, class factories, out-of-process, marshaling, etc.).

For another raw COM example, look at DirectX: Programming DirectX with COM is well written and talks about what they call "raw COM" is.