如何使用 P/Invoke 在 C# 中 return 列表?

How to return a list in C# using P/Invoke?

我正在开发一个小项目,我在其中使用 P/Invoke 并希望 return 在 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);

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

你不能这样做。模板类型,AFAIK,不适用于 P/Invoke 可能是因为运行时无法计算出 list/how 的长度来分配和释放所需的内存量等

您最好的选择是编写 C++/CLI 包装器或将 C++ 中的 return 类型更改为 int 数组或将参数传递给可以在 C++ 端填充的方法(一个输出参数)。

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

相关问题:Marshalling .NET generic types