Вам необходимо использовать механизм выделения памяти , специфичный , который использовался для выделения памяти в первую очередь.
Итак, если вы использовали COM и IMalloc
интерфейс для выделения памяти, то вам нужно передать IntPtr
обратно Free
метод в этой реализации для освобождения выделенной памяти.
Если вы действительно используете COM-распределитель, который возвращается при вызове CoGetMalloc
, то вы можете вызвать static FreeCoTaskMem
метод на Marshal
класс .
Класс Marshal
также имеет метод для освобождения памяти, который выделяется посредством вызова LocalAlloc
, называемого FreeHGlobal
.
Однако, и это распространенный случай, если память была выделена оператором new
в C ++ или вызовом malloc
в C, тогда вы необходимо предоставить функцию в неуправляемом коде через взаимодействие, которое освободит память соответствующим образом.
В случае C ++ вы бы представили функцию, которая принимает указатель и просто вызывает delete
для этого указателя. В случае malloc
вы должны создать функцию, которая принимает указатель и вызывает free
для этого указателя.
В конкретном отношении к вашему вопросу может показаться, что DsImageTransfer
является API-интерфейсом, специфичным для поставщика (у которого не так много возможностей для обнаружения в Интернете , я боюсь), поэтому требуется дополнительная информация об этой конкретной функции API и о том, как она распределяет память. Знание типа дескриптора (в данном случае HBITMAP
) не дает никаких указаний относительно его распределения. Он может быть наделен всеми механизмами, упомянутыми выше.
Если предположить, что он создает HBITMAP
с использованием функций API объекта GDI (в частности, CreateBitmap
function ), тогда вы можете использовать функцию DeleteObject
для освобождения дескриптора (согласно странице документации для функций API GDI Object).