[英]Pass array from C# to C++
我正在尝试将数组从 C# 传递给 C++ DLL,然后从 C++ 打印它。
C#代码如下:
[DllImport("DLL1.dll", CallingConvention = CallingConvention.StdCall)]
public static extern void GMSH_PassVector([MarshalAs(UnmanagedType.SafeArray,SafeArraySubType = VarEnum.VT_I4)] int[] curveTag);
int[] curveTagArray = { 1, 2, 3, 4 };
GMSH_PassVector(curveTagArray);
C++头文件代码如下:
extern "C" GMSH_API void GMSH_PassVector(std::vector<int> *curveTags);
C++ cpp 文件代码如下显示数组的第一个元素:
void GMSH_PassVector(std::vector<int> *curveTags)
{
printf("Hello %d \n", curveTags[0]);
}
似乎我做错了什么,显示了一个值,但它是错误的。
我不认为封送机制能够将 int[] 转换为 std::vector。 最好使用语言基类型。 将 C++ 函数更改为
void GMSH_PassVector(int * arr, int size)
在 C# 中,您必须实例化一个 IntPtr 来保存数组第一个元素的地址。
int bufferSize = 4;
int[] buffer = new int[bufferSize];
buffer[0] = 1;
buffer[1] = 2;
buffer[2] = 3;
buffer[3] = 4;
int size = Marshal.SizeOf(buffer[0]) * buffer.Length;
IntPtr bufferPtr = Marshal.AllocHGlobal(size);
Marshal.Copy(buffer, 0, bufferPtr, size);
GMSH_PassVector(bufferPtr, size);
Marshal.FreeHGlobal(bufferPtr);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.