【发布时间】:2010-12-25 15:06:17
【问题描述】:
我有以下结构:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct WAVEHDR
{
internal IntPtr lpData; // pointer to locked data buffer
internal uint dwBufferLength; // length of data buffer
internal uint dwBytesRecorded; // used for input only
internal IntPtr dwUser; // for client's use
internal uint dwFlags; // assorted flags (see defines)
internal uint dwLoops; // loop control counter
internal IntPtr lpNext; // reserved for driver
internal IntPtr reserved; // reserved for driver
}
我需要分配非托管内存来存储上述结构的实例。指向此结构的指针将传递给 waveOut win32 api 函数(waveOutPrepareHeader、waveOutWrite、waveOutUnprepareHeader)。
- 我应该使用
Marshal.AllocHGlobal()还是Marshal.AllocCoTaskMem()?有什么区别? - 我应该将
sizeof(WAVEHDR)或Marshal.SizeOf(typeof(WAVEHDR))传递给内存分配方法吗?有什么区别?
注意分配的内存必须固定。
【问题讨论】:
标签: c# .net winapi memory-management unmanaged