If you use Visual C++, then it can handle COM with virtually no COM-specific knowledge. You can jump into Direct3D programming with no COM knowledge, except "Call this funny function instead of operator new", and, "Roll a custom smart pointer class using this function".