从 C++ 库方法返回的“char*”获取 C# 字符串?

Posted

技术标签:

【中文标题】从 C++ 库方法返回的“char*”获取 C# 字符串?【英文标题】:Get C# String from "char*" returned from C++ library method? 【发布时间】:2012-05-28 22:58:39 【问题描述】:

我有一个在我的 C# 应用程序中使用的 C++ 库。 C++ 库中的一种方法返回char *。如何在我的 C# 应用程序中将 char * 转换为字符串?

显然在我的 C# 应用程序中,此方法返回的数据类型是 sbyte * 类型。

【问题讨论】:

P/Invoke 或...? (请用访问方法标记。) 封送它为StringBuilder? @pst 我不确定,因为我对 C++ 编程非常陌生。我在源代码部分有方法,在标题部分有 c# 应用程序将使用的方法。在标题部分有方法签名.. @cicada 我将在哪里使用它?在 C++ 部分或 C# 中? 参考:msdn.microsoft.com/en-us/library/k9s9t975.aspx 【参考方案1】:

String 拥有a constructor that takes a char*

char* x = ...
string s = new string(x);

还有another one that takes a sbyte*

sbyte* x = ...
string s = new string(x);

【讨论】:

当我将 sbyte * x 分配给返回 char * 的 C++ 方法时,会生成以下错误:错误 1 ​​指针和固定大小的缓冲区只能在不安全的上下文中使用。有什么想法吗?谢谢! 发现问题出在哪里...我不得不在方法签名中写 unsafe... :) 非常感谢!:)

以上是关于从 C++ 库方法返回的“char*”获取 C# 字符串?的主要内容,如果未能解决你的问题,请参考以下文章

从 c# 项目 System.AccessViolationException 调用 c++ char*

为啥我不能在发布版本中将 char* 字符串从 C++ 返回到 C#?

为啥 C++ 从 C# 中为返回自定义结构的函数获取错误的参数值

调用从 c# 返回 char* 的 c++ dll 函数。无法使用 DllImport()

将 C# 字符串传递给 C++,并将 C++ 结果(字符串、char*.. 任何)传递给 C#

C# 中的元帅 C++“char**”