char*转换为C#中的字符串

本文关键字:字符串 转换 char | 更新日期: 2023-09-27 18:21:35

我正在从返回char*指针的本机DLL调用函数,如何将返回的指针转换为字符串?我试过了:

char* c = function();
string s = new string(c);

但它只是返回了一个奇怪的汉字,这不是c的正确值。

char*转换为C#中的字符串

也许本机DLL实际上返回的是ANSI字符串,而不是Unicode字符串。在这种情况下,调用Marshal.PtrToStringAnsi:

using System.Runtime.InteropServices;
...
string s = Marshal.PtrToStringAnsi((IntPtr)c);

更新外部函数的p/Invoke声明,如下所示:

[DllImport ( "MyDll.dll", CharSet = CharSet.Ansi, EntryPoint = "Func" )]
[return : MarshalAs( UnmanagedType.LPStr )]
string Func ( ... );

这样,你就不必在拿到指针后做额外的工作。

您的示例并不完全清楚,但您的注释表明您正在从c#调用c++dll。您需要返回一个bstr,而不是char*或字符串。

我会从这个问题/答案开始,当我必须执行这个操作时,我使用了这个问题/回答:

如何从本机(C++)代码返回文本

public static void Main(string[] args)
        {
            var charArray = new[] {'t', 'e', 's', 't'};
            fixed (char* charPointer = charArray)
            {
                var charString = new string(charPointer);
            }
        }