如何将 C# 字符串 [] 编组(理想情况下在 SWIG 中)到 C++ 字符串*?
Posted
技术标签:
【中文标题】如何将 C# 字符串 [] 编组(理想情况下在 SWIG 中)到 C++ 字符串*?【英文标题】:How do I marshall (in ideally in SWIG) a C# string[] to a C++ string*? 【发布时间】: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 还是其他一些结构/类或字符数组?能写的具体一点吗? 【参考方案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++ 字符串之间进行转换的最简单方法。以上是关于如何将 C# 字符串 [] 编组(理想情况下在 SWIG 中)到 C++ 字符串*?的主要内容,如果未能解决你的问题,请参考以下文章