2009-07-28 1 views

답변

21

를 어디에 값을 반환 ++ 당신의 C에서 마샬링하는 방법 많은 데이터 계층을 호출 /를 P를 알 수있는 방법이 없기 때문에 당신은 수동으로 수행해야합니다. 다음 innerStructs을 무료로 Marshal.CoTaskMemFree를 호출 할 수 있습니다 - 당신이 당신의 C# 코드에서 innerStructs에 대한 메모리를 해제하려는 경우, 당신은 당신의 C++ 코드에서 표준 할당 CoTaskMemAlloc를 사용한다는 것을

struct OuterStruct { 
    int numberStructs; 
    IntPtr innerStructs; 
}; 

OuterStruct s = getStructs(); // using DllImport 
var structSize = Marshal.SizeOf(typeof(InnerStruct)); 
var innerStructs = new List<InnerStruct>(); 
var ptr = s.innerStructs; 

for (int i = 0; i < s.numberStructs; i++) 
{ 
    innerStructs.Add((InnerStruct)Marshal.PtrToStructure(ptr, 
     typeof(InnerStruct)); 
    ptr = ptr + structSize; 
} 

참고.

+0

쿨 맨, 정말 고마워. 또한 간단한 질문으로, 벡터를 마샬링 할 수 있습니까? 그래서 OuterStruct에 InnerStructs 벡터가있을 수 있습니까? 클래스를 마샬링 할 수는 없다는 것을 알고 있지만, 아마도 누군가이 작업을하기 위해 뭔가 까다로울 것이라고 생각했습니다. – DevDevDev

+0

내가 아는 것은 아니지만 나는 결코 보지 못했습니다. :-) –

+0

포인터를'int'에 캐스트 했습니까? 64 비트 프로세스에서 실행중인 경우 어떻게해야합니까?! [당신은 캐스트가 필요 없습니다] (https://msdn.microsoft.com/en-us/library/system.intptr.op_addition (v = vs.110) .aspx) – doug65536

관련 문제