Dot-Net

C# 中的元帥“char *”

  • October 2, 2008

給定 DLL 中的以下 C 函式:

char * GetDir(char* path );

您將如何將這個函式 P/Invoke 到 C# 中並正確編組 char *。.NET 似乎知道如何執行 LPCTSTR,但是當我無法弄清楚在呼叫此函式時不會導致 NotSupportedException 觸發的任何封送處理時。

OregonGhost 的答案只有在從 GetDir 返回的 char* 在 HGlobal 或 LocalAlloc 中分配時才是正確的。我不記得是哪一個,但 CLR 會假定來自 PInvoke 函式的任何字元串返回類型都分配有一個或另一個。

一種更穩健的方法是將 GetDir 的返回值鍵入為 IntPtr。然後,您可以使用任何 Marshal.PtrToStringAnsi 函式來獲取字元串類型。它還為您提供了以您選擇的方式釋放字元串的靈活性。


[DllImport("your.dll", CharSet = CharSet.Ansi)]
IntPtr GetDir(StringBuilder path);

您能否就 GetDir 的行為給我們任何其他提示?它會修改輸入字元串嗎?返回的值是如何分配的?如果你能提供,我可以給出更好的答案。

引用自:https://stackoverflow.com/questions/162897