我有大量的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