У меня есть следующая структура:
[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 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))
в метод выделения памяти? В чем разница?
ЗАМЕЧАНИЕ, что выделенная память должна быть закреплена.