如何解决我应该CoTaskMemFree吗?
我在C#
中有一个代码,它从本地dll
获取一些字符串:
[DllImport(pluginName)]
[return: MarshalAs(UnmanagedType.LPWStr)]
private static extern string GetStringResource(int key);
和C++
:
extern "C"
{
LPWSTR __declspec(dllexport) __stdcall GetStringResource(int key)
{
std::wstring result = GetStringForKey(key);
wchar_t* buffer = (wchar_t*)::CoTaskMemAlloc((result.size() + 1) * sizeof(wchar_t));
if (buffer == nullptr)
return buffer;
std::copy(result.begin(),result.end(),buffer);
buffer[result.size()] = L'\0';
return buffer;
}
}
现在的问题是
- 我应该
CoTaskMemFree
C#
中分配的字符串吗? - 如果我从
[MarshalAs(UnmanagedType.LPWStr)]
函数签名中删除了C#
,该怎么办?那我应该释放它吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。