COM boils down to a C ABI, aiui.
And with the introduction of WinRT extensions, it got even richers.
Naturally one can try to call COM via C, and there are some COM APIs that offer C versions of them, however the tooling is already bad enough for .NET and C++ devs, doing it from C only for masochits or people that are religiouly against productive tooling.
I wish I could find that blog or whatever it was again.
This book has a Windows game, with DirectX, written in Assembly,
https://www.amazon.com/Programming-Tricks-Trade-Premier-Deve...
It is how I often provide APIs that need to work across (many) compiler boundaries. It is not standardized or anything, but de facto reliable on Windows.