Interop .NET互操作和TR1共享\u ptr 如何将SybdtPTR从非托管C++代码整理成C? 我在C++中有一个函数(通过C绑定进行了公开),它将分配一个新的MyObjor并通过SyrdYPPTR返回一个指针。p> 在C++中,我可以调用函数: MyObjHandle* ref = NULL: GetMyObject(&ref); // double ptr...

Interop .NET互操作和TR1共享\u ptr 如何将SybdtPTR从非托管C++代码整理成C? 我在C++中有一个函数(通过C绑定进行了公开),它将分配一个新的MyObjor并通过SyrdYPPTR返回一个指针。p> 在C++中,我可以调用函数: MyObjHandle* ref = NULL: GetMyObject(&ref); // double ptr...,interop,pinvoke,tr1,Interop,Pinvoke,Tr1,其中定义了MyObjHandle: typedef struct obj_t { shared_ptr<MyObject> objPtr; } MyObjHandle ; typedef结构对象{ 共享对象; }肌瘤柄; 我如何从C#调用GetMyObject?我显然只是定义了结构MyObjectHandle,就像在C#expt中一样,我将成员objPtr定义为IntPtr。它失败得很惨,出现了AccessViolationException错误。尝试了其他几款PInv

其中定义了MyObjHandle:

typedef struct obj_t {

   shared_ptr<MyObject> objPtr;

} MyObjHandle ;
typedef结构对象{
共享对象;
}肌瘤柄;

我如何从C#调用GetMyObject?我显然只是定义了结构MyObjectHandle,就像在C#expt中一样,我将成员objPtr定义为IntPtr。它失败得很惨,出现了AccessViolationException错误。尝试了其他几款PInvoke变体,但也失败了。我似乎找不到任何具有shared_ptr和C#的互操作示例。感谢您的帮助…

您只能在C#中以IntPtr的形式检索MyObjHandle。您将永远无法访问结构中的内部objPtr。pinvoke签名应如下所示:

//根据需要调整返回类型 [DllImport(…)] int GetMyObject(out IntPtr pMyObjHandle)

然后,您可以将pMyObjHandle传递回任何其他pinvoke方法,这些方法需要MyObjHandle*作为参数