Вы можете создать объектную модель в COM, что невозможно с помощью pinvoke. Очень похоже на классы .NET с поддерживаемыми методами, свойствами и событиями. Хорошим примером являются пространства имен взаимодействия Office (например, Microsoft.Office.Interop.Excel), реализованные в чистом COM на стороне Office.
Обратите внимание, что такие удобные библиотеки COM, как эта, используют COM Automation, подмножество COM, которое было разработано для упрощения взаимодействия между различными языками. Но это накладывает жесткие ограничения на типы, которые вы можете использовать в объявлениях методов.
Написание COM-кода на C ++ не особенно легко, хотя ATL и встроенные мастера Visual Studio могут сильно помочь. Попробуйте вместо этого использовать язык C ++ / CLI. Намного легче начать работу благодаря встроенной поддержке взаимодействия в языке.