本文介绍了如何将C#数组传递给C++,并将其返回给C#以及其他项?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个使用C++DLL的C#项目。(在Visual Studio 2010中)
我必须将一个int数组从C#代码传递给C++函数,C++函数会在数组中添加一些元素,当控制权返回到C#代码时,C#代码也会在同一数组中添加元素。
最初,我在C#代码中声明了一个数组(大小为10000),C++代码能够添加元素(因为它只是一个整型数组,内存分配相同),但问题是,由于访问数组的外部,我得到了运行时错误。
我可以将大小增加到100000,但我同样不知道C++代码将添加多少元素(即使它可以只有1个元素)。
我想做这样的事情。
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#以及其他项?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!