Это зависит от контекста, в котором звонящий вам позвонит.Во-первых, если вы используете неавтоматизированный тип, маршалинг для вас не будет выполняться автоматически.Следовательно, вам придется написать собственный маршалер для перемещения wchar_t * через границы процесса.
Тем не менее, нет правила, согласно которому вы не можете передать wchar_t * в COM-интерфейс.Есть много COM-интерфейсов, которые передают пользовательские типы (структуры, указатели на структуры, обратные вызовы и т. Д.), И все это только для ваших нужд.
В вашем интерфейсе, если вы используете строки WCHAR, я бы объявилSetAudioLanguageOrder следующим образом:
STDMETHOD(SetAudioLanguageOrder(const WCHAR *nValue)) = 0;
Это делает более понятным, кто (не) должен освободить строку, и предоставляет больше контекста о том, как обрабатывать строку (вызывающему не рекомендуется изменять строку, хотявызывающий может, конечно, вызвать такое поведение, если он хочет написать плохой код).
Вызов GetAudioLanguageOrder в порядке, но теперь возникает вопрос: кто освобождает возвращаемую строку и как ее следует освободить?Через бесплатный (...)?Или C ++ удалить []?Если вы используете BSTR, то вы знаете - используйте SysFreeString.Это одна из причин использования BSTR вместо строк WCHAR.