我目前的解决方法是从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 ++编组整个向量?
答案 0 :(得分:0)
std :: vector<>必须驻留在连续的内存空间中。因此,所有double
都在一个内存块中,因此它可以作为单个内存缓冲区进行编组(将指针指向第一个元素并对缓冲区的长度执行size() * sizeof(double)
)。之后,它被简化为编组double
数组的情况,我发现this帖子解释了如何(有和没有复制到C#内存空间)。
答案 1 :(得分:-1)
使用固定长度的数据结构将帮助您摆脱长度检查。