일부 비 관리 코드의 경우 C# 래퍼에 다음과 같은 구조체가 있습니다. 포인터를 사용하여 일부 데이터를 넘기려고합니다. ushort * 및 byte * 부분에서는 문제가되지 않지만 고정 된 int에서는 작동하지 않습니다.int * 포인터가 컴파일되지 않는 반면 ushort * 및 byte *는 괜찮습니다.
[StructLayout(LayoutKind.Sequential)]
unsafe public struct IMAGE
{
public fixed int nSize[2];
public ushort* pDepthIm;
public byte* pColorIm;
}
몇 가지 정보를이 구조체를 채우려면, 내가 사용
당신은 고정되지 않은에 포함 된 고정 된 크기의 버퍼를 사용할 수 없습니다
_im.nSize = pSize;
에서unsafe public void LoadImage(ushort[] depthImage, byte[] rgbImage, int[] size) { unsafe { fixed (int* pSize = size) fixed (ushort* pDepth = depthImage) fixed (byte* pRGB = rgbImage) { _im.nSize = pSize; _im.pColorIm = pRGB; _im.pDepthIm = pDepth; ... } } }
컴파일러는 진술에 오류가 표시 표현. 고정 된 명령문을 사용해보십시오.
나는 이미 int
이 (그러나 fixed int
뿐만 아니라 포인터 타입 *
과) 다른 방식으로 초기화되는 것으로 나타났습니다,하지만 난 값을 넘겨하는 방법을 알아낼 수 없습니다. 변수 유혹 할 때, ... int*
로
업데이트 주심 : 내가 언급 한 메시지의 MSDN error reference을 가로 질러왔다. 이제는 IMAGE
구조체의 fixed
문과 관련이 있다고 확신하지만 아직 해결 방법을 모르고 있습니다.
표시된 모든 코드는 C#입니다. 관리되지 않는 C++ 라이브러리에 액세스하기 때문에 C++ 태그를 추가했습니다. – DIF