Я работаю над сервисами, использующими код C ++, предоставляемыми .NET dll, доступ к которым осуществляется через COM Interop. Я пишу как на C ++, так и на C #.
Один из методов, который предоставляется DLL и вызывается из C ++, запрашивает DLL
вернуть выделенный байтовый массив, содержащий некоторую информацию. После создания этого метода в моем коде на C # генератор .tlb показал его следующим образом:
HRESULT _stdcall DownloadData(
[out] SAFEARRAY(unsigned char)* outputBuf);
Тестирование показало, что когда я отправляю указатель по мере необходимости, я получаю выделенный буфер
и заполнен необходимой мне информацией, но я не понимаю в этом сценарии, чья ответственность (C # \ C ++) освободить эту память и как.
Любой совет? Спасибо.
Стандарт Правила выделения памяти COM все еще применяются для взаимодействия. Это ответственность вызывающего (клиентский код, потребляющий C # DLL) выпустить outputBuf
массив (используя SafeArrayDestroy).
Других решений пока нет …