如何将C#数组传递给C++,并将其返回给C#以及其他项?

How to pass C# array to C++ and return it back to C# with additional items?(如何将C#数组传递给C++,并将其返回给C#以及其他项?)

本文介绍了如何将C#数组传递给C++,并将其返回给C#以及其他项?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用C++DLL的C#项目。(在Visual Studio 2010中)

我必须将一个int数组从C#代码传递给C++函数,C++函数会在数组中添加一些元素,当控制权返回到C#代码时,C#代码也会在同一数组中添加元素。

最初,我在C#代码中声明了一个数组(大小为10000),C++代码能够添加元素(因为它只是一个整型数组,内存分配相同),但问题是,由于访问数组的外部,我得到了运行时错误。

我可以将大小增加到100000,但我同样不知道C++代码将添加多少元素(即使它可以只有1个元素)。

那么,是否存在用于两者或其他方式的通用数据结构(动态数组)?我正在使用Visual Studio 2010。

我想做这样的事情。
PS:没有编译过的代码,这里我用的是char数组而不是int数组。

C#代码

[DllImport("example1.dll")]
private static extern int fnCPP (StringBuilder a,int size)
...

private void fnCSHARP(){
    StringBuilder buff = new StringBuilder(10000);
    int size=0;
    size = fnCPP (buff,size);
    int x = someCSHARP_fu();
    for ( int i=size; i < x+size; i++) buff[i]='x';// possibility of run time error
}

C++代码

int fnCPP (char *a,int size){
  int x = someOtherCpp_Function();
  for( int i=size; i < x+size ; i++) a[ i ] = 'x'; //possibility of run time error 
  return size+x;
}

推荐答案

有一篇关于在托管和非托管代码之间传递数组的好文章Here。问题是,为什么首先需要将数组从C#传递到C++?为什么不能在C++端(在fnCPP方法中)进行分配,并返回指向C#代码的指针,而不是像yet another Stackoverflow question那样使用Marshal.Copy( source, destination, 0, size )呢?而在fnCSHARP方法中,您可以将数组的内容复制到某个可变长度的数据结构中(例如List)。

这篇关于如何将C#数组传递给C++,并将其返回给C#以及其他项?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:如何将C#数组传递给C++,并将其返回给C#以及其他项?