【发布时间】:2012-03-13 22:06:55
【问题描述】:
我有一个库,我希望最终将其功能公开给 .NET。我要公开的方法具有以下签名:
void DoSomething(std::list<SomeStruct>& someList);
变量someList 由DoSomething 填充。
我已经知道如何从库中导出。我的主要问题是这个功能的“.NET 友好”界面是什么样的?如果我想将 C# 与 P/Invokes 一起使用,我会假设 std::list 是个坏主意。
还有哪些其他选择?作为调用者,我不会提前知道应该传入的缓冲区大小。另外,作为调用者,我不想多次调用具有固定大小的小缓冲区的函数,也不想传入超大缓冲区。
这种情况的最佳做法是什么?
【问题讨论】:
-
您不能通过 pinvoke 将 C++ 类公开给托管代码。只有 C++/CLI 可以在这样的场景中工作。您仍在复制列表元素,除非它是简单类型,否则这是不可避免的。结构并不简单。
-
谢谢@HansPassant——我可以不使用 STL 列表类,而是使用(本机)动态分配的数组。如何看待这种方法?是否太容易出错(关于在托管端释放内存)?这样的界面会通过“笑”的因素吗?
-
您提出的问题与您在此处发布的问题完全不同。编辑或重新提问。
标签: c# c++ .net pinvoke marshalling