[英]Is it necessary to free the memory of strings in C++ received from C#?
我在 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);
SerializationError
返回的IntPtr
使用 C++ 中的new
分配。 所以我有另一个 DLL 导出的 function 在被 C# 调用时释放指针。
我的问题是,我是否需要在 C++ 的SerializeMesh
参数中释放const char * path
的 memory?
不,C# 封送器会为您解决这个问题。 char*
将在 PInvoke 调用的生命周期内有效。 如果您的 C++ 代码期望拥有char*
,您应该在SerializeMesh
中制作一份副本。
这是字符串编组的入门。 如果您确实需要使用const char*
,则可能需要将MarshalAsAttribute设置为UnmanagedType.LPStr
。 有关字符串编组行为的更多信息,请参见此处。
如果您想更深入地挖掘, 这是另一个有用的参考。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.