char*转换为C#中的字符串
本文关键字:字符串 转换 char | 更新日期: 2023-09-27 18:21:35
我正在从返回char*
指针的本机DLL调用函数,如何将返回的指针转换为字符串?我试过了:
char* c = function();
string s = new string(c);
但它只是返回了一个奇怪的汉字,这不是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);
}
}