如何使用P / Invoke在C#中返回一个列表?

时间:2015-07-21 02:18:11

标签: c# c++ pinvoke

我正在开发一个小项目,我使用P / Invoke并希望在C#中返回以下内容:

public: class std::list<int,class std::allocator<int> > const * __thiscall TransactionsModule_t::GetTransactionList(void)const

现在这就是我困惑的地方:

[DllImport("TransactionManager.dll", EntryPoint = "...", CallingConvention = CallingConvention.ThisCall)]
public static extern ??? GetTransactionList(
    IntPtr interfacePtr);

我甚至不知道从哪里开始寻找,因为我无法直接看到返回类型是什么,显然它是一种列表。我明白了,但这是一个嵌套列表吗?也许是词典Dictionary<int,List<int>>

1 个答案:

答案 0 :(得分:3)

你不能这样做。模板类型AFAIK可能无法使用P / Invoke,因为运行时无法确定列表的长度/如何分配&amp;释放所需的内存量等。

您最好的选择是编写C ++ / CLI包装器或将C ++中的返回类型更改为int数组,或者将参数传递给可以在C ++端填充的方法(out参数)。 / p>

您可能认为C#列表和std :: list可以两种方式编组,但事实并非如此。

相关问题:Marshalling .NET generic types