c# - 如何将 C# 数组传递给 C++ 并将其返回给 C# 以及其他项目?

标签 c# c++ arrays marshalling

我有一个使用 C++ dll 的 C# 项目。 (在 Visual Studio 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;
}

最佳答案

有一篇关于在托管和非托管代码之间传递数组的好 MSDN 文章 Here .问题是,为什么首先需要将数组从 C# 传递到 C++?为什么你不能在 C++ 端进行分配(在你的 fnCPP 方法中),并返回一个指向 C# 代码的指针,而不仅仅是使用 Marshal.Copy(source, destination, 0, size)yet another Stackoverflow question ?与您的 fnCSHARP 方法相比,您可以将数组的内容复制到一些可变长度的数据结构(例如列表)。

关于c# - 如何将 C# 数组传递给 C++ 并将其返回给 C# 以及其他项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7624561/

相关文章:

c# - Google.Apis.Requests.RequestError - 需要 OAuth 2 访问 token

c# - "Couldn' t 找到一个 IPlatformOperations。这永远不应该发生,你的依赖解析器在 WPF 上被破坏了

c++ - 如何使用 const_iterator 公开 C++ 类

c++ - 使用 boost::assign::list_of 构造 std::vector 时的歧义

c++ - 相似的二叉树

c# - 使用 Linq 获取当前和上一个项目

c# - 在 jquery 对话框中显示 azure storage 存储的文档,并且不应下载

java - 用对象填充数组

c - 使用memcpy方法

3 个对象中的 Javascript 求和值