gpt4 book ai didi

.net - 在编码包装通过传递接口(interface)句柄工作的 C++ 接口(interface)(全部抽象)时 Intptr 是否足够?

转载 作者:行者123 更新时间:2023-11-30 04:38:05 25 4
gpt4 key购买 nike

我正在尝试包装一个非托管 C++ 接口(interface),该接口(interface)由几个抽象结构(具有所有纯虚拟方法)和一个返回这些结构的句柄 (shared_ptrs) 的小型工厂命名空间组成。

看来,正因为如此,我也许可以通过将指针编码为 System.IntPtr 类型(尽管它们属于 boost::shared_ptr 类型,这样可以吗?我是否需要额外处理? ) 并将它们传递给简单的托管包装器,然后返回到 native 代码,而无需担心它们指向什么。这是在正确的轨道上吗?

对于使用 STL 类型或 shared_ptr 类型的 pinvoke 进行数据编码的任何帮助或引用,我将不胜感激(我在 MSDN 和其他网站上找到的关于字符串和基元结构的信息很少。)

谢谢,

最佳答案

我建议定义一个 C API 以供 .NET 层使用。使用 void *const void *对于结构的“句柄”类型,并定义一个 extern "C"每个方法的函数(包括工厂方法和析构函数)。你不能编码 shared_ptr<T>直接参数,所以你需要使用 void *处理。

在.NET层,首先定义一个派生自SafeHandle的类型其唯一目的是正确处理句柄(即调用表示对象析构函数的 C API)。接下来,定义一个表示实际对象的包装器类型,并为表示对象成员函数的每个 C API 函数提供方法。最后,定义一个包装 C API 工厂方法的工厂类型。

工作量很大,但这是正确的做法。

关于.net - 在编码包装通过传递接口(interface)句柄工作的 C++ 接口(interface)(全部抽象)时 Intptr 是否足够?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3340273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com