How to pass C# array to C++ and return it back to C# with additional items?(如何将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#以及其他项?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何将C#数组传递给C++,并将其返回给C#以及其他项?
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 输入按键事件处理程序 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01