我在Visual C++ DLL此功能的char *編組的C#
char * __stdcall GetMessage(int id) {
char buffer[250];
.
.
.
strcpy(buffer, entry); // entry is a char * that has allocated 250 chars
return (char *)buffer;
}
我試圖導入從C#這個功能用下面的代碼
[DllImport("mydll.dll", CharSet=CharSet.Ansi)]
public static extern string GetMessage(int id);
我想在提出本一個MessageBox它總是在字符串的末尾有奇怪的符號。任何建議如何克服這個問題?
我沒有提到,我調試的DLL的char *緩存爲0結束一個適當的字符串。 – Ioannis 2009-11-27 12:49:09
我不知道它是如何與返回值,但參數適用於以下規則:使用字符串爲const char *,使用StringBuilder爲char *。另一方面,你正在返回一個指向本地變量的緩衝區的指針。這聽起來不是一個好主意。這個問題可能是你的朋友,但是:http://stackoverflow.com/questions/370079/pinvoke-for-c-function-that-returns-char – OregonGhost 2009-11-27 12:53:37
@OreghonGost,不,規則是:使用'string'爲什麼你不會改變,並且使用'StringBuilder'來執行你的操作。 'const'給出了一個提示,但並不嚴格要求。 – 2009-11-27 17:19:09