...You've just discovered why interfaces like COM and Cocoa are a good idea, yes. Welcome to 1999. Join me in cursing the proliferation of POSIX and FFIs. JOIN ME.
The C wrappers generated by MIDL are also fairly similar to raw C++, compare (where pUnk is an IUnk *):
pUnk->Something(&bA);
with... IUnk_Something(pUnk, &bA);
which expands to something like this: pUnk->lpVtbl->Something(pUnk, &bA);