【发布时间】:2011-11-29 06:54:29
【问题描述】:
我有一个使用 C++ dll 的 C# 项目。 (在视觉工作室 2010 中)
我必须将一个 int 数组从 C# 代码传递给 C++ 函数,C++ 函数将在数组中添加少量元素,当控制权返回到 C# 代码时,C# 代码也会在同一个数组中添加元素。
最初我在 C# 代码中声明了一个数组(大小为 10000),并且 C++ 代码能够添加元素(因为它只是一个 int 数组,内存分配是相同的),但问题是我有运行时错误由于访问数组之外。
我可以将大小增加到 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;
}
【问题讨论】:
-
你能用C++/CLI吗?你能用C++/CLI吗?
-
您不能将项目“添加”到数组中。数组的大小是固定的。使用不同的数据结构或更改两者之间的接口方式。
-
@Jeff 不完全是“添加”,我添加了代码以从我身边清除
标签: c# c++ arrays marshalling