장치에서 데이터를 보내는 기능을 가진 C++ DLL이 있습니다. 내 관리 C# 코드에서 C++ 함수 positionCallback을 호출합니다. 여기서 포지션을 확인하십시오. pos per definition - 배열 배열을 가리키는 세 개의 포인터로 구성된 배열입니다.IntPtr 주소 증가 (값이 아님)
public void positionCallback(uint devNo,uint count,uint index,ref System.IntPtr pos,ref System.IntPtr mrk)
이제 내 문제는 내가 그 3 개 각 배열의 데이터를 추출 할 것입니다하지만 난 단지 배열 1에 대한 데이터를 얻을 수 있으며, 나머지 2 내가 쓰레기 값을 얻고있다. 다음은 내가 코드 위
// Copy the unmanaged array to managed memory for Axis 2
IntPtr ptr2 = IntPtr.Add(pos,2*sizeof(Int64));
Marshal.Copy(pos,managedArrayAxis1,0,(int)count);
// Copy the unmanaged array to managed memory for Axis 2
Marshal.Copy(ptr2, managedArrayAxis2, 0, (int)count);
만, 쓰레기 데이터가 수집 managedArrayAxis1뿐만 managedArrayAxis2에 대한 올바른 데이터를주고 노력하고 코드입니다. 내가 pos에 대한 IntPtr 주소를 잘못 증가 시켰습니까?
도와주세요!
있습니다를? Int이어야하며 Int64를 사용하면 문제가 발생할 수 있습니다. – pquest
Int32는 managedArrayAxis2에 대한 가비지 값도 제공합니다. 그래서 두 가지를 모두 시도했습니다. 다른 제안이 도움이 될 것입니다! – Maverick
참조로 포인터를 전달한다는 사실은 어떨까요? 나는 C++ 라이브러리에서 int **처럼 보일 것이라고 생각한다. C++ 메소드가 찾고있는 것이 맞습니까? – pquest