如何将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#找到任何互操作样本。任何帮助表示赞赏...
答案 0 :(得分:0)
您只能在C#中将MyObjHandle检索为IntPtr。您将永远无法访问结构中的内部objPtr。 pinvoke签名应如下所示:
//根据需要调整返回类型 [的DllImport(...)] int GetMyObject(out IntPtr pMyObjHandle);
然后,您可以将pMyObjHandle传递回任何其他期望MyObjHandle *作为参数的pinvoke方法。