在一个C的动态链接库中,我有一个像这样的函数:
我希望您使用P/Invoke从C#中调用它。
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;
}
我希望您使用P/Invoke从C#中调用它。
[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);
CoTaskMemAlloc()
分配它,正确的事情就会发生? - David Heffernan