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

时间:2014-02-28 10:15:23

标签: c# c++ vector marshalling

我目前的解决方法是从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 ++编组整个向量?

2 个答案:

答案 0 :(得分:0)

按照标准,

std :: vector&lt;&gt;必须驻留在连续的内存空间中。因此,所有double都在一个内存块中,因此它可以作为单个内存缓冲区进行编组(将指针指向第一个元素并对缓冲区的长度执行size() * sizeof(double))。之后,它被简化为编组double数组的情况,我发现this帖子解释了如何(有和没有复制到C#内存空间)。

答案 1 :(得分:-1)

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

3D Vector structure from c++ to C#