Вы можете использовать все, что вам нравится в реализации вашего com-объекта, поскольку он всегда остается в процессе (или dll), который его создает.
Вам необходимо придерживаться COM-типов в вашем COM-интерфейсе, чтобы типы можно было распределить между процессом, в котором используется ваш объект, и процессом, в котором был создан ваш объект.
Вы правы. Эта статья не относится к этой ситуации, поскольку вы ничего не пропускаете через границу. Инфраструктура COM имеет дело с маршалингом типов COM через границу для вас.
Просто убедитесь, что вы перехватываете все исключения внутри ваших методов COM, вы не можете позволить им вытекать из функции, поскольку инфраструктура COM не знает, что с ними делать.
Лично я склонен иметь тонкий слой кода COM, который имеет дело с преобразованием между типами COM и «нормальными» типами, а затем вызывает код, который выполняет реальную работу (см. здесь ). Этот уровень включает обработчик исключений, который перехватывает все и преобразует в соответствующие HRESULT.