繁体   English   中英

将数组从 C# 传递到 C++

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM