INTPTR로 구조 변환 :을 IntPtr 대신 I 사용다음 I 클래스 정의가
typedef struct
{
void *p;
int len;
} OUR_MEM_STR;
바이트 [] :
[StructLayout(LayoutKind.Sequential)]
public class OUR_MEM_STR
{
public byte[] p;
public int len;
};
이 아래 C 구조의 등가 (고화질) 인 멤버 p를 입력하십시오. 왜냐하면 그것은 thorughout C# 프로젝트에 사용되었습니다.
I 렌 = 10, p = I 새로운 바이트가에게 INTPTR을 만들고 싶어 [10]
가지는 객체 (OBJ)를 정의 하였다. 어떻게 개체의 크기를 구합니까?
IntPtr pObj = Marshal.AllocHGlobal(obj.len + sizeof(int));
Marshal.StructureToPtr(obj, pObj, true);
내가 무엇을했는지보십시오. 그것은 너무 하드 코딩 된 것 같습니다. 내가 아래 발췌 문장을한다면;
IntPtr pObj = Marshal.AllocHGlobal(Marshal.SizeOf(obj));
obj.p 4의 크기를 반환하지 (10) 때문에 바이트 배열에 대한 포인터를 가리키는 취한 메모리는 4 바이트이기 때문에이 잘못된 크기를 반환 하.
더 좋은 방법이 있습니까?
복제하려는 구조체의 C 정의를 표시 할 수 있습니까? – JaredPar
@JaredPar, 나는 질문을 편집 –
그래서, 만약 내가 IntPtr pObj = Marshal.AllocHGlobal (Marshal.SizeOf (obj)); 잘못된 매개 변수를 사용하면 괜찮을까요? –