Использование таких интерфейсов гарантирует, что объект, реализующий интерфейс, будет создан и освобожден в той же куче.
Однако это не решит проблему размещения и освобождения динамических типов строк в разных кучах.Есть много возможных решений для этого, но, на мой взгляд, наилучшим подходом является использование WideString через границу модуля.
Тип WideString является оболочкой вокруг COM BSTR и размещается в общей куче COM.Вам нужно только использовать WideString для интерфейса.Внутренние компоненты реализующих классов могут использовать собственные строки Delphi.
Как строки представляют проблемы, так и динамические массивы.Попытка передачи динамических массивов через границы модуля небезопасна.Не существует решения, аналогичного WideString, которое было бы настолько удобным.Вы можете использовать вариантные массивы, но это довольно неуклюже по сравнению с WideString.