char *到C#中的字符串

时间:2012-01-27 22:48:27

标签: c# pointers

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

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

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

4 个答案:

答案 0 :(得分:13)

本机DLL实际上可能正在返回ANSI字符串而不是Unicode字符串。在这种情况下,请致电Marshal.PtrToStringAnsi

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

答案 1 :(得分:2)

更新外部函数的P / Invoke声明:

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

这样你获得指针后就不必再做额外的工作了。

答案 2 :(得分:1)

您的示例并不完全清楚,但您的评论建议您从c#调用c ++ dll。您需要返回bstr,而不是char *或字符串。

我从这个问题/答案开始,我在执行此操作时使用了这个问题:

How to return text from Native (C++) code

答案 3 :(得分:0)

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