【问题标题】:How to marshal a vector<double> from C++ to C#如何将向量 <double> 从 C++ 编组到 C#
【发布时间】:2014-02-28 10:15:23
【问题描述】:

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

【问题讨论】:

标签: c# c++ vector marshalling


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    使用固定长度的 DataStructure 将帮助您摆脱长度检查。

    3D Vector structure from c++ to C#

    【讨论】:

    • 引用一个充满 TODO 的 P/Invoke 网站并不是很有帮助。也没有引用每天返回不同结果的搜索查询。
    • @ThomasW。指出,因此答案改变了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    相关资源
    最近更新 更多