MSDN很少涉及的问题,想求教一下。
Marshal.FreeHGlobal的意思?
还有下面这段代码,是用于什么的?
C# code
internal static IntPtr ConvertRectangleToMemory(RectangleF[] rect)
{
if (rect == null)
{
throw new ArgumentNullException("rect");
}
GPRECTF gPRECTF = default(GPRECTF);
int j = Marshal.SizeOf(gPRECTF.GetType());
int k = rect.Length;
IntPtr intPtr = Marshal.AllocHGlobal(k * j);
for (int i = 0; i < k; i++)
{
Marshal.StructureToPtr(new GPRECTF(rect[i]), (IntPtr)((long)intPtr + i * j), false);
}
return intPtr;
}
------解决方案--------------------窗口句柄?画图的?
------解决方案--------------------Marshal.FreeHGlobal 方法
释放以前从进程的非托管内存中分配的内存。
==>官方的解释,
具体不懂呢,
你是不是调用其它语言写的 dll
------解决方案--------------------
自定义消息,或从c#中直接调用 某些消息传送数据时使用, 使用前,获取非托管的句柄,使用后,释放
------解决方案--------------------
------解决方案--------------------
可使用 FreeHGlobal 从全局堆释放由 AllocHGlobal、ReAllocHGlobal 或任何等效非托管 API 方法分配的内存。如果 hglobal 参数为 IntPtr.Zero,则此方法什么也不做。
你可以使用 这个API 分配内存
C/C++ code
HGLOBAL WINAPI GlobalAlloc(
__in UINT uFlags,
__in SIZE_T dwBytes
);
------解决方案--------------------
这段代码在全局堆上分配内存之后把需要列集的数据复制到可供非托管函数访问的固定内存
别的列集方法还有COM、pinvoke、C++interop等等
------解决方案--------------------
------解决方案--------------------
图形api经常使用rect这个结构