我正在开发一个小项目,我使用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>>
?
答案 0 :(得分:3)
你不能这样做。模板类型AFAIK可能无法使用P / Invoke,因为运行时无法确定列表的长度/如何分配&amp;释放所需的内存量等。
您最好的选择是编写C ++ / CLI包装器或将C ++中的返回类型更改为int数组,或者将参数传递给可以在C ++端填充的方法(out参数)。 / p>
您可能认为C#列表和std :: list可以两种方式编组,但事实并非如此。