gpt4 book ai didi

c# - 是否有必要释放从 C# 接收到的 C++ 字符串的内存?

转载 作者:行者123 更新时间:2023-12-04 08:28:13 24 4
gpt4 key购买 nike

我在 C++ 中有以下公开的 DLL 函数。

// center_of_rotation_api.h
// CENTER_OF_ROTATION_API is a macro like __cdecl(dllexport) on Windows
CENTER_OF_ROTATION_API void SerializeMesh(Mesh * mesh, const char * path);
CENTER_OF_ROTATION_API const char * SerializationError(Mesh * mesh);
在 C# 中,我使用以下内容。
// dll is the name of the compiled dll
[DllImport(dll)]
public static extern void SerializeMesh(IntPtr mesh, string path);
[DllImport(dll)]
public static extern IntPtr SerializationError(IntPtr mesh);
IntPtr返回者 SerializationError使用 new 分配在 C++ 中。所以我有另一个 DLL 导出函数,它在被 C# 调用时释放指针。
我的问题是,我需要释放 const char * path的内存吗?在 SerializeMesh 的论证中在 C++ 中?

最佳答案

不,C# 编码(marshal)拆收器会为您处理这个问题。 char*将在 PInvoke 调用的生命周期内有效。如果您的 C++ 代码希望拥有 char* , 你应该在 SerializeMesh 复制一份.
Here是字符串编码的入门读物。如果你真的需要使用 const char* ,您可能需要设置 MarshalAsAttributeUnmanagedType.LPStr .见 here有关字符串编码(marshal)处理行为的更多信息。
Here如果您想更深入地挖掘,这是另一个有用的引用。

关于c# - 是否有必要释放从 C# 接收到的 C++ 字符串的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65160150/

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