Я работаю с неуправляемым API, который предоставляет функцию обратного вызова.Эта функция получает IntPtr
и целое число, которое описывает байтовый массив.API ожидает, что я заполню его данными.
Я хотел бы использовать управляемый byte[]
для заполнения этого буфера.То, как я это делал до сих пор, выглядит примерно так:
public void MyCallback(IntPtr rawBufferPtr, int rawBufferLength)
{
var buffer = new byte[rawBufferLength];
<fill the buffer with whatever data I want>
Marshal.Copy(buffer, 0, rawBufferPtr, rawBufferLength);
}
Можно ли избежать Marshal.Copy
и как-то выделить byte[]
для хранения данных непосредственно на rawBufferPtr
?
Если нет, то какие еще есть варианты, чтобы избежать копирования блока?byte*
является единственной альтернативой?