我有大量的C代碼,我需要在C#中使用。例如:C中的免費C分配內存#
long foo(char** mystring);
void free_string(char* mystring);
foo()
使用malloc()
爲mystring
分配內存。我已經嘗試了幾種從C#中調用這個函數的方法,但我沒有釋放mystring
。您能否請給我一些關於如何撥打foo()
的指導方針,以便我以後可以免費撥打mystring
?
例如,如果char**
由StringBuilder[]
表示,那麼我怎樣才能使用它在free_string()
中被釋放?
究竟你是如何調用C代碼?我們可以舉一些你的嘗試代碼嗎?你的問題目前的狀況太模糊,無法準確回答。 – 2012-02-20 09:18:46
在本地分配內存以便在託管中釋放相當多的開銷,以確保調用者完全知道他們在做什麼,您可能需要考慮其他技術來分配託管代碼中的內存,例如像這樣的http:// stackoverflow .com/questions/8425501/how-can-i-pass-an-empty-string-buffer-that-can-be-written-to-from-native-to-c – dice 2012-02-20 09:23:44
我試着調用幾個C代碼方式,但我對他們中的任何一個都沒有信心。例如:我試過 'static extern long foo( [MarshalAs(UnmanagedType.LPArray,ArraySubType = UnmanagedType.LPStr)] StringBuilder [] mystring);' 我試着'IntPtr ptr'而不是'StringBuilder'和Marshal.FreeCoTaskMem(ptr)。這是行不通的 – pdp11 2012-02-20 09:31:56