如何将向量从 C++ 封送到<double> C#
How to marshal a vector<double> from C++ to C#
我目前的解决方法是从 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 矢量结构
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- C++在数学计算中将double转换为int
- 在c++中为double类型的数组创建一个unique_ptr
- vector<vector<double>> to mxArray using memcpy
- (double) 和 double() 之间的区别
- C++标准是否允许<double>在没有开销的情况下实现 std::可选
- C++ Version Of Double.longBitsToDouble
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 有没有办法在C++的赋值中将"char**"转换为"double"?
- 为什么 nlohmann/json 序列化 "null" 而不是在 double 上"0"?
- 使用 std::vector<double> 访问由 std::unique_ptr<double[2] 管理的数据>
- 将 std::vector<double> 从 C++ 包装到 C 以在 Swift 中使用
- 错误:无法将"<lambda(double)>"转换为"double(*)(double)"
- 如何正确将"strings"转换为"double"?
- 如何在<double>矢量中创建复杂类型的模板<T>?
- "double* grade"、"double *grade"和"double* fn()"有什么区别?
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ