【问题标题】:How do I marshall (in ideally in SWIG) a C# string[] to a C++ string*?如何将 C# 字符串 [] 编组(理想情况下在 SWIG 中)到 C++ 字符串*?
【发布时间】:2010-09-29 21:23:23
【问题描述】:

我是 C# 编程的新手,并试图调用 C++ 中的包装函数。

在 C++ 中我有以下原型的函数

string* swap(string* ptr1, string*ptr2){
    //swap the array of string
    return ptr2;
}

如何将此函数包装到 C# 中(最好使用 SWIG,但不是必需的)?

【问题讨论】:

  • 该数组是如何终止的?不能传数组的大小吗?
  • 什么是字符串类型?它是 std::string 还是其他一些结构/类或字符数组?能写的具体一点吗?

标签: c# c++ marshalling swig


【解决方案1】:

我对 Java 也有同样的问题。

对于 Java,我没有找到任何预先打包且易于使用的东西。我必须定义自己的类型映射。

如果您没有得到更好的 C# 答案,您可以从 SWIG: How to wrap std::string& (std::string passed by reference) 中描述的 SWIG/C++ 代码开始。

您需要替换对 Java 类型、JNI 方法(包括对“jenv”的引用)和“JavaThrowException”的引用。

这些来自 SWIG 的文件还可能提供一些 C# 的相关示例代码:

  • swig/Lib/csharp/std_string.i
  • swig/Lib/csharp/typemaps.i

【讨论】:

  • String 相对简单(?)但是我不知道 c# 中的 string[] 是如何在内存中构造的。它们只是带有 \0 终止符的连续缓冲区?
  • 由于 C# 字符串是引用类型,我猜该数组是对非连续字符串对象的引用数组。我不知道在 C++ 中在 C# 和 C++ 字符串之间进行转换的最简单方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
  • 2015-03-09
  • 1970-01-01
相关资源
最近更新 更多