为 .NET 使用定义此本机接口的最佳方法是什么?

What's the best way to define this native interface for .NET consumption?

本文关键字:最佳 方法 是什么 接口 本机 NET 定义      更新时间:2023-10-16

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

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

变量someListDoSomething填充。

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

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

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

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