为 .NET 使用定义此本机接口的最佳方法是什么?
What's the best way to define this native interface for .NET consumption?
我有一个库,我想最终向.NET公开它的功能
void DoSomething(std::list<SomeStruct>& someList);
变量someList
由DoSomething
填充。
我已经知道如何从图书馆导出了。我的主要问题是,对于这个函数,".NET友好"的界面会是什么样子?如果我想将C#与P/Invokes一起使用,我认为std::list
是个坏主意。
还有什么其他选择?作为调用者,我不知道应该提前传入的缓冲区的大小。此外,作为调用者,我不想多次调用具有较小固定大小缓冲区的函数,也不想传入超大缓冲区。
这种情况的最佳做法是什么?
您可以定义一个结构用于pinvoke调用。把它装饰在原生和成熟的一面,这样每一面的包装都是一样的。对于可变大小的out参数,您可以使用::GlobalAlloc来分配一个数组,然后可以在C#中释放该数组。同时分发物品计数。在C#中,Marshal类型有各种方法可用于处理GlobalAlloc’d数组。
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 检测win32服务创建和删除的最佳方法
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 将线程中的数据存储到全局容器的最佳方法?
- 将一系列整数放入类的最佳方法是什么?
- 在派生类中使用基类的私有成员变量的最佳方法
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 比较两个节点坐标的最佳方法是什么?
- 在nodejs中使用本机代码的最佳方法是什么?
- 将 pybind11 绑定标记为已弃用的最佳方法
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?