Sie benötigen die spezifischen Speicherzuordner Mechanismus zu verwenden, der verwendet wurde, die Erinnerung an erster Stelle zuzuweisen.
Also, wenn Sie COM wurden unter Verwendung von und den IMalloc
interface den Speicher zuzuweisen, dann müssen Sie die IntPtr
zurück in die Free
method auf dieser Umsetzung, um den zugewiesenen Speicher freigeben.
Wenn Sie tatsächlich den COM-Allokator verwenden, der durch einen Anruf an CoGetMalloc
zurückgegeben wird, können Sie die static FreeCoTaskMem
method über die Marshal
class anrufen.
Die Marshal
Klasse hat auch ein Verfahren zum Freigeben von Speicher, der durch einen Aufruf von LocalAlloc
FreeHGlobal
genannt zugeordnet ist.
Allerdings, und das ist ein üblicher Fall, wenn der Speicher durch die new
operator in C++ oder einen Aufruf von malloc
in C zugewiesen wurde, dann müssen Sie eine Funktion in nicht verwalteten Code durch Interop aussetzen, die den Speicher frei werden in geeigneter Weise .
Im Fall von C++ würden Sie eine Funktion verfügbar machen, die einen Zeiger nimmt und einfach delete
für diesen Zeiger aufruft. Im Fall von malloc
würden Sie eine Funktion erstellen, die einen Zeiger annimmt und free
für diesen Zeiger aufruft.
In Bezug auf Ihre Frage, es scheint, dass DsImageTransfer
ist eine herstellerspezifische API (eine, die doesn't have much discoverability on the web entweder, fürchte ich), so mehr Informationen über diese spezifische API-Funktion benötigt und wie es Speicher reserviert. Wenn man nur den Handle-Typ kennt (eine HBITMAP
in diesem Fall), gibt dies keinen Hinweis darauf, wie es zugeordnet ist. Es kann mit allen oben genannten Mechanismen belegt werden.
Unter der Annahme, es schafft die HBITMAP
GDI Object api functions mit (genauer gesagt, die CreateBitmap
function), dann könnte man die DeleteObject
function mit dem Griff lösen (wie in der Dokumentationsseite für die Object-API-Funktionen GDI).
Wie wurde der Speicher zugewiesen? –
Dies ist ein Duplikat von http: // stackoverflow.com/fragen/2159150/how-to-frei-intptr-in-c –
OK, also was sagt die Dokumentation für DsImageTransfer mit dem Ergebnis zu tun, wenn Sie damit fertig sind? Wenn Sie den Speicher freigeben müssen, müssen sie Ihnen sagen, wie es geht. –