如何将C#数组传递给C++;把它和其他物品一起还给C#? 我有一个C++程序,它使用C++ DLL。(在visual studio 2010中) 我必须把一个int数组从C++代码传递到C++函数,C++函数会在数组中添加一些元素,当控件返回到C代码时,C代码也会在同一数组中添加元素。br/> 最初,我在C代码中声明了一个数组(大小10000),C++代码能够添加元素(因为它只是int数组,内存分配是相同的),但是问题是,由于访问数组的外端,我得到了运行时错误。 我可以把大小增加到100000,但是我不知道C++代码会添加多少元素(即使它只能是1个元素)。br/>

如何将C#数组传递给C++;把它和其他物品一起还给C#? 我有一个C++程序,它使用C++ DLL。(在visual studio 2010中) 我必须把一个int数组从C++代码传递到C++函数,C++函数会在数组中添加一些元素,当控件返回到C代码时,C代码也会在同一数组中添加元素。br/> 最初,我在C代码中声明了一个数组(大小10000),C++代码能够添加元素(因为它只是int数组,内存分配是相同的),但是问题是,由于访问数组的外端,我得到了运行时错误。 我可以把大小增加到100000,但是我不知道C++代码会添加多少元素(即使它只能是1个元素)。br/>,c#,c++,arrays,marshalling,C#,C++,Arrays,Marshalling,那么,是否有一个通用的数据结构(动态数组)可以同时使用或以其他方式使用呢?我正在使用VisualStudio2010 像这样的事情我想做 PS:不是编译代码,这里我使用了char数组而不是int数组 C#代码 [DllImport(“example1.dll”)] 私有静态外部内部fnCPP(StringBuilder a,内部大小) ... 私有void fnCSHARP(){ StringBuilder buff=新的StringBuilder(10000); int size=0; 大小=

那么,是否有一个通用的数据结构(动态数组)可以同时使用或以其他方式使用呢?我正在使用VisualStudio2010

像这样的事情我想做
PS:不是编译代码,这里我使用了char数组而不是int数组

C#代码

[DllImport(“example1.dll”)]
私有静态外部内部fnCPP(StringBuilder a,内部大小)
...
私有void fnCSHARP(){
StringBuilder buff=新的StringBuilder(10000);
int size=0;
大小=fnCPP(浅黄色,大小);
int x=someCSHARP_fu();
对于(int i=size;i
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;
}
int-fnCPP(字符*a,int-size){
int x=someOtherCpp_函数();
对于(int i=size;i
有一篇关于在托管代码和非托管代码之间传递数组的好MSDN文章。问题是,为什么你需要首先从C到C++传递数组?为什么不能在C++侧(FnCPP方法)中分配,并返回指向C代码的指针,而不只是使用<代码> MSEHALL?复制(源、目的地、0、大小)< /C> >?与fnCSHARP方法相比,您可以将数组的内容复制到一些可变长度的数据结构(例如列表)。

您可以使用C++/CLI吗?您可以使用C++/CLI吗?您不能向数组“添加”项。数组的大小是固定的。使用不同的数据结构或更改如何在这两个接口之间进行交互。@杰夫并不是完全“添加”,我已经添加了代码以清除我的侧,如果您在C++中分配内存并将其返回到C++,则需要稍后将指针传递回C++以释放内存。NET垃圾收集器在这里帮不了你。
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;
}