문제

intptr을 istream.read로 전달해야하며 intptr은 ulong 변수를 가리켜 야합니다. 내 ulong 변수를 가리키는이 intptr을 어떻게 얻습니까?

도움이 되었습니까?

해결책

가장 좋은 방법은 iStream 정의를 변경하는 것입니다.

void Read([Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] byte[] pv,
          int cb, /*IntPtr*/ ref int pcbRead);

그런 다음 글을 쓸 수 있습니다

int pcbRead = 0;
Read(..., ref pcbRead);

다른 팁

안전하지 않은 코드를 피하려면 Gchandle 메소드를 사용해야한다고 생각합니다. 이것이 박스형 값 유형과 어떻게 작동하는지 잘 모르겠습니다.

var handle = GCHandle.Alloc(myVar, GCHandleType.Pinned);
var ptr = handle.AddrOfPinnedObject()

안전하지 않은 코드를 사용할 수없는 경우 다음을 시도하십시오.

var myValue = GetTheValue();
var ptr = Marshal.AllocHGLobal(Marshal.SizeOf(typeof(ulong));
Marshal.StructureToPointer(ptr, myValue, false);

나중에 어느 시점에서 "PTR"값으로 Marshal.freehglobal을 호출해야합니다.

var pointer = new IntPtr(&myVariable);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top