我從本機DLL調用函數返回一個char*
指針,我怎樣才能將返回的指針轉換爲字符串? 我想:char *在C#中的字符串
char* c = function();
string s = new string(c);
,但它只是返回一個奇怪的中國人的性格,這是不是c
正確的價值。
我從本機DLL調用函數返回一個char*
指針,我怎樣才能將返回的指針轉換爲字符串? 我想:char *在C#中的字符串
char* c = function();
string s = new string(c);
,但它只是返回一個奇怪的中國人的性格,這是不是c
正確的價值。
也許本地DLL真的返回ANSI字符串而不是Unicode字符串。在這種情況下,調用Marshal.PtrToStringAnsi
:
using System.Runtime.InteropServices;
...
string s = Marshal.PtrToStringAnsi((IntPtr)c);
謝謝,解決了我的問題。抱歉沒有提供足夠的信息。 – method 2012-01-27 23:13:13
你的例子並不完全清楚,但你的評論暗示你正在從c#調用C++ dll。您需要返回一個bstr,而不是char *或字符串。
我想這個問題/答案,當我不得不執行此操作,這在我以前開始:
更新您的P/Invoke外部函數的聲明這樣:
[DllImport ("MyDll.dll", CharSet = CharSet.Ansi, EntryPoint = "Func")]
[return : MarshalAs(UnmanagedType.LPStr)]
string Func (...);
這樣,你不會有你得到的指針後做額外的工作。
確保c指向Unicode(UTF-16)數據。 – 2012-01-27 22:52:08
我在一個本地DLL中調用函數,它返回「hi」作爲char *'。由於某些原因,轉換後的字符串不是「hi」。 – method 2012-01-27 22:59:05
你沒有發佈任何可以用來幫助你的東西。 「我有一些東西(但我不會告訴你它是什麼),當我做這件事時,它會返回一些我不指望的東西(但我也沒有告訴你)」。發佈外部函數聲明,您在C#中使用的import語句以及調用它的代碼(包括變量聲明),也許有人可以提供幫助。事實上,這確實是猜測。 – 2012-01-27 23:05:31