我从一个返回char*
指针的本机DLL调用一个函数,如何将返回的指针转换为字符串?
我试过了:
char* c = function();
string s = new string(c);
但它只是返回了一个奇怪的汉字,这对c
来说不是正确的值。
答案 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 *或字符串。
我从这个问题/答案开始,我在执行此操作时使用了这个问题:
答案 3 :(得分:0)
public static void Main(string[] args)
{
var charArray = new[] {'t', 'e', 's', 't'};
fixed (char* charPointer = charArray)
{
var charString = new string(charPointer);
}
}