Запись COM-серверов на C не является невозможной. Просто COM-код уже сложен, он будет немного сложнее в C, поскольку вы не получите помощи от встроенной поддержки v-таблицы, которую генерирует совместимый C ++ компилятор. Или библиотека классов, как ATL. Вы должны создать свой собственный.
Хорошим источником для примера кода COM, написанного на C, является проект WINE. Например, реализация интерфейса IGlobalInterfaceTable . Обратите внимание на GITClassFactoryVtbl в этом коде, это таблица диспетчеризации интерфейса для фабрики классов, и StdGlobalInterfaceTableImpl_Vtbl, таблица диспетчеризации для IGlobalInterfaceTable.
Не уверен, что это даст вам более глубокое понимание программирования COM. Вряд ли вы когда-нибудь напишите настоящий сервер, подобный этому. Вы уже написали внепроцессный сервер?