2010-08-18 6 views
1

관리되지 않는 C++ 코드에서 shared_ptr을 C#으로 마샬링하는 것이 어떻게 가능합니까?.NET Interop 및 TR1 shared_ptr

나는 C++에서 (C 바인딩을 통해 노출 된) 새로운 MyObject를 할당하고 shared_ptr을 통해 포인터를 반환하는 함수가있다.

MyObjHandle* ref = NULL: 
GetMyObject(&ref); // double ptr... 

MyObjHandle가 정의 :

C에서

는 ++ 나는 함수를 호출 할 수 있습니다 내가 C에서 # GetMyObject에 전화를 PInvoke를 얼마나

typedef struct obj_t { 

    shared_ptr<MyObject> objPtr; 

} MyObjHandle ; 

? 나는 MyObjectHandle이라는 구조체를 C#에서 정의한 것처럼 명백히 했었습니다. 멤버 objPtr을 IntPtr로 정의했습니다. AccessViolationException 오류로 인해 비참하게 실패했습니다. 실패한 몇 가지 다른 PInvoke 변형을 시도했습니다. shared_ptr 및 C#을 사용하여 interop 샘플을 찾을 수없는 것 같습니다. 어떤 도움을 주셔서 감사합니다 ...

답변

0

MyObjHandle은 C#에서 IntPtr로만 검색 할 수 있습니다. 구조 내에서 내부 objPtr에 액세스 할 수 없습니다.

// [같이 DllImport (...)] INT GetMyObject (IntPtr입니다 pMyObjHandle에서) 필요에 따라 반환 유형을 조정; 것처럼 PInvoke를 서명이 보일 것입니다

그런 다음 매개 변수로 MyObjHandle *을 예상하는 다른 pinvoke 메소드로 pMyObjHandle을 다시 전달할 수 있습니다.