我有一个库,我希望最终将其功能公开给 .NET。我想要公开的方法具有以下签名:
void DoSomething(std::list<SomeStruct>& someList);
变量someList
填充为 DoSomething
.
我已经知道如何从库导出了。我的主要问题是这个功能的“.NET 友好”界面是什么样的?我假设 std::list
如果我想将 C# 与 P/Invokes 一起使用,这是一个坏主意。
还有什么其他选择?作为调用者,我不会知道应该提前传入的缓冲区的大小。另外,作为调用者,我不想对具有小型固定大小缓冲区的函数进行多次调用,也不想传递超大缓冲区。
此案例的最佳实践是什么?
最佳答案
您可以定义一个结构体以在 pinvoke 调用中使用。在 native 面和管理面进行装饰,以便每一面的包装相同。对于可变大小的 out 参数,您可以使用::GlobalAlloc 来分配一个数组,然后可以在 C# 中释放该数组。还传递项目计数。在 C# 中,Marshal 类型有多种方法可用于处理 GlobalAlloc'd 数组。
关于c# - 为 .NET 使用定义此 native 接口(interface)的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9692959/