如果我有一个像这样返回 char* 的 C++ 函数:
char *cctalk_app_event_name(DG_CCTALK_APP_EVT_CODE);
以及对应的C#签名:
[System.Runtime.InteropServices.DllImportAttribute("cctalk.dll", EntryPoint = "cctalk_app_event_name", CallingConvention = CallingConvention.Cdecl)]
public static extern System.IntPtr cctalk_app_event_name(DG_CCTALK_APP_EVT_CODE param0);
如果 native 代码返回一个分配有 new 关键字的 char*,我肯定会在每次调用此函数 C# 时发生内存泄漏?有什么办法可以释放那段内存吗?
最佳答案
我从查看函数名称的直觉是,这很可能会返回一个指向 DLL 中的字符串常量的指针,在这种情况下,您无论如何都不需要担心释放指针。
如果 SDK 的手册 (link here) 没有任何用处,那么我会反汇编 DLL 并查看该函数的作用,但在建立之前不要担心如何删除它你需要的。
关于C# pinvoke 释放 native c++ 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20294036/