21xrx.com
2024-11-10 00:10:29 Sunday
登录
文章检索 我的文章 写文章
如何在C#中接收来自C++的数组?
2023-06-22 08:10:46 深夜i     --     --
C# C++ 数组 接收 互操作

C#和C++语言之间进行数据交互已经成为非常常见的需求了。在C#中接收来自C++的数组是其中一个常见的问题。

首先,需要在C++中定义一个返回数组的函数。下面是一个示例代码:


int* getArray(int size)

{

  int* arr = new int[size];

  for (int i = 0; i < size; i++)

  {

    arr[i] = i + 1;

  }

  return arr;

}

这个函数接收一个整数参数表示数组的大小,并返回一个int类型的指针,指向一个包含从1到size的整数的数组。

接下来,在C#中调用这个函数并接收返回的数组。下面是示例代码:

#

[DllImport("MyCppLibrary.dll")]

public static extern IntPtr getArray(int size);

static void Main(string[] args)

{

  int size = 5;

  IntPtr ptr = getArray(size);

  int[] arr = new int[size];

  Marshal.Copy(ptr, arr, 0, size);

  foreach (int item in arr)

  {

    Console.Write("{0} ", item);

  }

  Console.ReadKey();

}

在这个示例代码中,使用DllImport来调用C++的getArray函数,并把数组的大小作为参数传入。

接着,创建一个IntPtr类型的指针变量来接收返回的数组指针。

最后,使用Marshal类的Copy方法将返回的指针转换成int类型的数组。

使用这种方式,我们就可以在C#中接收来自C++的数组了。其中,最关键的是使用Marshal类的Copy方法来实现指针和数组之间的转换。正确使用这个方法,需要注意参数的顺序,以及确保分配了足够大小的数组。

总之,进行C#和C++之间数据交互是一项常见的需求,使用DllImport和Marshal类可以实现两种语言之间的数组交互。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复