gpt4 book ai didi

c# - 将 CString 从 C++ 编码(marshal)到 C# 时如何(如果需要)释放动态内存?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:00:41 28 4
gpt4 key购买 nike

我在 C++ 端有 CString cs,在 C# 端有 IntPtr ip,它通过编码(marshal)处理机制包含 cs 的值。

然后,我只需将需要的字符串作为 Marshal.PtrToStringAnsi(ip) 获取,一切正常,但我想知道我是否应该以及是否应该删除 ip 占用的非托管内存,即 cs?

最佳答案

你不能,你不知道非托管代码使用什么分配器来创建 CString 实例。此外,您必须调用 CString 的析构函数,您无法获取其地址。

如果此 CString 对象作为您从 C# 调用的 C++ 函数的函数返回值返回,您就完蛋了。从你的问题中不清楚。您将遇到无法控制的内存泄漏。将需要用 C++/CLI 编写的包装器来解决该问题。作为函数返回值返回的字符串必须由 CoTaskMemAlloc() 分配,以便由 P/Invoke 编码器正确清理。没有任何 C++ 代码能做到这一点。

关于c# - 将 CString 从 C++ 编码(marshal)到 C# 时如何(如果需要)释放动态内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2730663/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com