pinvoke: как освободить строку malloc'd?

в C DLL, у меня есть такая функция:

char* GetSomeText(char* szInputText)
{
      char* ptrReturnValue = (char*) malloc(strlen(szInputText) * 1000); // Actually done after parsemarkup with the proper length
      init_parser(); // Allocates an internal processing buffer for ParseMarkup result, which I need to copy
      sprintf(ptrReturnValue, "%s", ParseMarkup(szInputText) );
      terminate_parser(); // Frees the internal processing buffer
      return ptrReturnValue;
}

Я хотел бы вызвать его от C # с использованием P / Invoke.

[DllImport("MyDll.dll")]
private static extern string GetSomeText(string strInput);

Как правильно ли я правильно выпустить выделенную память?

Я пишущий перекрестный код, ориентированный на как Windows, так и Linux.

Редактировать: Как это

[DllImport("MyDll.dll")]
private static extern System.IntPtr GetSomeText(string strInput);

[DllImport("MyDll.dll")]
private static extern void FreePointer(System.IntPtr ptrInput);

IntPtr ptr = GetSomeText("SomeText");
string result = Marshal.PtrToStringAuto(ptr);
FreePointer(ptr);
9
задан David Heffernan 7 September 2011 в 08:37
поделиться