什么';是为.NET消费定义此本机接口的最佳方式

本文关键字:本机 接口 方式 最佳 定义 是为 NET 什么 | 更新日期: 2023-09-27 18:27:46

我有一个库,我想最终向.NET公开它的功能

void DoSomething(std::list<SomeStruct>& someList);

变量someListDoSomething填充。

我已经知道如何从图书馆导出了。我的主要问题是,对于这个函数,".NET友好"的界面会是什么样子?如果我想将C#与P/Invokes一起使用,我认为std::list是个坏主意。

还有什么其他选择?作为调用者,我不知道应该提前传入的缓冲区的大小。此外,作为调用者,我不想多次调用具有较小固定大小缓冲区的函数,也不想传入超大缓冲区。

这种情况的最佳做法是什么?

什么';是为.NET消费定义此本机接口的最佳方式

您可以定义一个结构用于pinvoke调用。把它装饰在原生和成熟的一面,这样每一面的包装都是一样的。对于可变大小的out参数,您可以使用::GlobalAlloc来分配一个数组,然后可以在C#中释放该数组。同时分发物品计数。在C#中,Marshal类型有各种方法可用于处理GlobalAlloc’d数组。