如何将向量从 C++ 封送到<double> C#

How to marshal a vector<double> from C++ to C#

本文关键字:lt double gt 向量 C++      更新时间:2023-10-16

我目前的解决方法是从 C# 使用以下方法获取向量的大小:

[DllImport("BridgeInterface.DLL", EntryPoint = "#46", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl]
private static extern int GetVectorSize();

其中BridgeInterface.dll是我的C++和 C# 代码之间的C++桥接口。然后,我使用以下方法封送每个向量元素:

[DllImport("BridgeInterface.DLL", EntryPoint = "#47", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl]
private static extern double GetVectorElement(int index);

有没有办法使用对C++的单个调用来封送整个向量?

std::vector<>,根据标准,必须驻留在连续内存空间中。因此,所有double都在一个内存块中,因此可以将其编组为单个内存缓冲区(将指针指向第一个元素并执行缓冲区长度的size() * sizeof(double))。之后,它被简化为编组double数组的情况,我找到了这篇文章来解释如何(有和没有复制到 C# 内存空间)。

使用固定长度的数据结构将帮助您摆脱长度检查。

从 c++ 到 C# 的 3D 矢量结构