콜백 함수를 제공하는 관리되지 않는 API로 작업하고 있습니다. 이 함수는 IntPtr
과 바이트 배열을 나타내는 정수를받습니다. API는 데이터로 채우기를 기대합니다.IntPtr + 크기에서 관리되는 바이트 배열을 만들 수 있습니까?
해당 버퍼를 채우기 위해 관리되는 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
을 피하고 어떻게 든 rawBufferPtr
에서 직접 데이터를 저장하기 위해 byte[]
을 할당 할 수 있나요 : 내가 지금까지 해왔 방법은 다음과 같이인가?
그렇지 않은 경우 블록 복사 방지를위한 다른 옵션은 무엇입니까? 기본적으로 유일한 대안은 byte*
입니까? Marshal.Copy
으로 전화하지 않으려면
당신은 명시 적으로 안전하지 않은 코드를 작성됩니다. 바이트 *를 사용하여 분명히 알 수 있습니다. –