.NET Interop和TR1 shared_ptr

时间:2010-08-18 01:52:50

标签: interop pinvoke tr1

如何将shared_ptr从非托管C ++代码编组到C#中?

我在C ++中有一个函数(通过C绑定公开),它将分配一个新的MyObject并通过shared_ptr返回一个指向它的指针。

在C ++中我可以调用函数:

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

定义了MyObjHandle:

typedef struct obj_t {

   shared_ptr<MyObject> objPtr;

} MyObjHandle ;

我如何从C#中调用GetMyObject?我明显只是定义了MyObjectHandle结构,就像在C#中一样,我将成员objPtr定义为IntPtr。由于AccessViolationException错误而失败了。尝试了其他几个也失败的PInvoke变种。我似乎无法使用shared_ptr和C#找到任何互操作样本。任何帮助表示赞赏...

1 个答案:

答案 0 :(得分:0)

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

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

然后,您可以将pMyObjHandle传递回任何其他期望MyObjHandle *作为参数的pinvoke方法。