Ответственность за освобождение памяти в COM Interop

Я работаю над сервисами, использующими код C ++, предоставляемыми .NET dll, доступ к которым осуществляется через COM Interop. Я пишу как на C ++, так и на C #.

Один из методов, который предоставляется DLL и вызывается из C ++, запрашивает DLL
вернуть выделенный байтовый массив, содержащий некоторую информацию. После создания этого метода в моем коде на C # генератор .tlb показал его следующим образом:

HRESULT _stdcall DownloadData(
[out] SAFEARRAY(unsigned char)* outputBuf);

Тестирование показало, что когда я отправляю указатель по мере необходимости, я получаю выделенный буфер
и заполнен необходимой мне информацией, но я не понимаю в этом сценарии, чья ответственность (C # \ C ++) освободить эту память и как.

Любой совет? Спасибо.

1

Решение

Стандарт Правила выделения памяти COM все еще применяются для взаимодействия. Это ответственность вызывающего (клиентский код, потребляющий C # DLL) выпустить outputBuf массив (используя SafeArrayDestroy).

1

Другие решения

Других решений пока нет …