我应该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 (将#修改为@)