double.
당신의 C#을하면해야한다는 것입니다 struct는 기본 데이터 유형만을 사용하며 C++의 네이티브 구조체와 완전히 같은 레이아웃을 가지고 있습니다. 수동 메모리를 사용하여 이러한 제한 사항을 해결할 수 있습니다. m 관리 및 안전하지 않은 코드. 보너스로 마샬링을 피함으로써 성능을 향상시킬 수 있습니다.
는 메모리를 할당 :
IntPtr arr = Marshal.AllocHGlobal (sizeof (MyStruct) * 256);
이것은 기본적으로 malloc
, 그래서 할당 된 메모리는 GC의 인식 밖에 있습니다.
IntPtr을 MyStruct[256]
인 것처럼 네이티브 코드에 전달할 수 있으며 IntPtr 만 정렬되고, 가리키는 메모리가 아니라 마샬링됩니다. 기본 코드와 관리 코드는 동일한 메모리에 직접 액세스 할 수 있습니다. 당신이 기억을 완료하면 free
에,
Marshal.FreeHGlobal (arr);
하는 것을 잊지 마세요
static unsafe MyStruct GetMyStructAtIndex (IntPtr arr, int index)
{
MyStruct *ptr = ((MyStruct *)arr) + index;
return *ptr;
}
static unsafe void SetMyStructAtIndex (IntPtr arr, int index, MyStruct value)
{
MyStruct *ptr = ((MyStruct *)arr) + index;
*ptr = value;
}
: 읽으려면
는/C#을 포인터를 사용, C 번호와 배열의 구조체를 쓰기 그것.
해결 방법이 없습니까? 그래서 C++에서 이렇게 할 수 있습니까? – uray
@uray 내가 제안 할 수있는 유일한 것은 정규 어레이입니다. 그게 가능하지 않다면 ... –