Мне нужно передать массив байтов в memset, из-за которого P/Invoke clunkiness принимает IntPtr. Протестировано вручную, это работает, но я ищу теоретическое подтверждение. Правильно ли этот метод?Передача байта [] as IntPtr от PInvoke до memset
[DllImport("msvcrt.dll", EntryPoint = "memset", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]
public static extern IntPtr MemSet(IntPtr dest, int c, int count);
static unsafe void ZeroMemset (byte[] data)
{
fixed (byte* bytes = data) {
MemSet ((IntPtr)bytes, 0, data.Length);
}
}
Нет «chunkiness». Ваша ошибка не объявляла аргумент * dest * логическим путем. Это должно быть 'byte []'. Удалите дополнительную chunkiness, объявив второй аргумент обычным способом, 'byte'. Не-коренастый маркер-пинвокер заботится обо всем остальном. –
Я имел в виду неряшливость, ошибку. Сожалею. – ArekBulski
@Hans Второй параметр: 'int':' void * memset (void * dest, int c, size_t count); ' –