调用具有std ::列表为参数的C 函数

call C++ function which is having std::list as parameter

本文关键字:参数 函数 列表 std 调用      更新时间:2023-10-16

在这里,我正在编写包装器,以在C#Project中调用C 函数。我正在寻找C /CLR方法。使用C /CLR方法,我们可以将DLL直接添加到C#项目。

在我的C /CLR中,我具有下面的一个功能。

int StartScan(std::list<SomeObject*> *DeviceList);

我想从C#调用此功能。从C#调用的等效属性是什么。我已经尝试使用linkedlist,这是 std :: list 的等效属性,如果我们使用了P/Invoke方法。

你不能。由于您的问题意味着您正在使用C /CLR并且对该代码有控制权,因此您应该编写公共方法C#应用来将托管的List<T>对象作为参数,然后将内容复制到std::list<SomeObject*>对象您的C 代码显然实际上需要。

您需要用于T的托管类型,这与您在C 中使用的SomeObject相当。您也必须克隆这些对象,从托管类型到std:list

如果您无法更改C /CLI代码,则必须编写垫片DLL来处理转换。P/Invoke不知道如何自动执行此操作。


如果您能够按照本评论中的建议使用STL/CLR库,即可以将std::库用法切换到cliext::库,则它包含代码来帮助此。例如,您可以创建一个cliext::list对象,将托管的List<T>传递给其构造函数,然后将托管列表的内容复制到cliext::list对象。

例如:如何:从.NET集合转换为STL/CLR容器