C#释放IntPtr引用的内存
我正在使用一些非托管代码,它将指针(IntPtr)返回给大型图像对象.我使用引用,但在完成图像之后,我需要释放指针引用的内存.目前,唯一可以释放内存的是关闭整个应用程序.我需要能够从我的应用程序内释放内存.
这是调用分配内存的调用. hbitmap是返回的指针,需要解除分配. [DllImport("twain_32.dll",EntryPoint = "#1")] public static extern TwainResult DsImageTransfer( [In,Out] Identity origin,[In] Identity dest,DataGroup dg,DataArgumentType dat,Message msg,ref IntPtr hbitmap); 解决方法
这将取决于如何分配记忆.
Marshal类具有通过共同的互配分配模式分配的内存的方法,如
FreeCoTaskMem.如果非托管代码使用非Interop兼容的分配方式,那么您不能互操作.
更新 如果我冒昧猜测,twain_32.dll中调用的函数#1是TWAIN提供程序中的DS_ENTRY函数. Twain specifications调出内存资源管理协议:
所以为了释放资源,你应该调用DSM_MemFree,据说Win32平台将通过GlobalFree或Marshal.FreeHGlobal实现. 由于这主要是我的猜测,您最好使用您使用的特定TWAIN实现的规范进行验证. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |