【发布时间】:2013-11-29 22:14:01
【问题描述】:
如果我有一个返回 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);
如果本机代码返回一个分配有 new 关键字的 char*,我肯定每次调用这个函数 C# 时都会有一个 memleak?有没有办法释放那段内存?
【问题讨论】:
-
在 C/C++ 中使用 DLL 时如何工作?
-
是的,您需要释放它。您可以在 C++ 库中创建一个
Free函数,使用分配的任何内容来释放它(然后从您的 C# 代码中调用它),或者如果它是使用 COM 任务内存分配器分配的,则可以使用 Marshal.FreeCoTaskMem . -
我只有 .h 的 dll,根本没有关于它是如何实现的文档,那么我怎么知道它是否是使用 COM 任务内存分配器分配的呢?可能不是,因为它是一个普通的旧 c++ lib..
-
好像有文档。你应该得到它。
标签: c# c++ memory-leaks pinvoke