【发布时间】:2016-09-23 13:36:16
【问题描述】:
C++ 代码调用返回字符串的 C# 方法。我应该如何在 C++ 中释放分配的非托管内存?我应该使用 free() 还是 delete?
C#:
[Guid("52E4971F-E075-41BA-A84F-B6BE8BD66A21")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[ComImport]
public interface ISomeInterface
{
[return: MarshalAs(UnmanagedType.LPWStr)]
string SomeMethod([MarshalAs(UnmanagedType.LPWStr)] string text);
}
C++:
class SomeClass
{
virtual int32_t __stdcall _someMethod(const char16_t *text, char16_t **r) = 0;
char16_t * someMethod(const char16_t *text)
{
char16_t * result;
_someMethod(text, &result);
return result; // how to correct release this memory?
}
}
该解决方案适用于 Windows 和 Linux。
【问题讨论】:
-
能否请您出示一些/您的代码,以便我们以最好的方式提供帮助?
标签: c# c++ interop marshalling