Идентификаторы в верхнем регистре являются макросами, они гарантируют, что функция интерфейса COM имеет правильную подпись.Функция COM, совместимая с автоматизацией, должна использовать правильное соглашение о вызовах __stdcall и должна возвращать long (hresult), который указывает на ошибку или статус успеха.Дополнительные требования заключаются в том, что интерфейс COM должен реализовывать IUnknown, а типы аргументов функции должны ограничиваться типами, совместимыми с автоматизацией.
Поддержка взаимодействия COM в CLR обеспечивает выполнение этих требований.Он генерирует v-таблицу для интерфейса C #, который автоматически реализует IUnknown, вам не нужно реализовывать его самостоятельно.Возвращаемое значение HRESULT генерируется автоматически, оно сопоставляется с исключением.Аргументы функций автоматически маршалируются из их неуправляемого типа в эквивалентный нативный тип.
Перевод типа аргумента является довольно большой темой и описан в любой приличной книге на эту тему (например, Адам Натан).Достаточно сказать, что любой совместимый с автоматизацией тип имеет соответствующий управляемый тип.Более сложные объекты - это объект VARIANT, строка BSTR и массив SAFEARRAY.
Вы используете атрибут [ComVisible] в C # для создания COM-сервера.Несколько других имеют отношение, например, [Guid] и [InterfaceType].Это хорошо освещено в любых примерах.Вы создаете библиотеку типов с помощью Tlbexp.exe или, чаще, с помощью Regasm.exe / tlb.Последний инструмент - тот, который требуется для регистрации сервера, вы больше не можете использовать Regsvr32.exe.