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#以及其他项?
基础教程推荐
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 如何激活MC67中的红灯 2022-01-01