Dot-Net
C# 中的元帥“char *”
給定 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 的行為給我們任何其他提示?它會修改輸入字元串嗎?返回的值是如何分配的?如果你能提供,我可以給出更好的答案。