C#字符串编组和LocalAlloc

我有一个来自非托管DLL的COM回调,我需要在C#中使用它。 非托管DLL期望被调用者使用LocalAlloc (调用者将使用LocalFree )分配内存,使用WSTR填充它并分别设置valuechars到WSTR指针和字符串长度。

代码片段我正在尝试转换为C#:

 STDMETHODIMP CMyImpl::GetString(LPCSTR field, LPWSTR* value, int* chars) { CStringW ret; if (!strcmp(field, "matrix")) { ret = L"None"; if (...) ret.Append(L"001"); else if (...) ret.Append(L"002"); else ret.Append(L"003"); } if (!ret.IsEmpty()) { int len = ret.GetLength(); size_t sz = (len + 1) * sizeof(WCHAR); LPWSTR buf = (LPWSTR)LocalAlloc(LPTR, sz); if (!buf) { return E_OUTOFMEMORY; } wcscpy_s(buf, len + 1, ret); *chars = len; *value = buf; return S_OK; } return E_INVALIDARG; } 

等效的C#代码是什么?

编辑:COM接口:

[id(2)] HRESULT GetString([in] LPCSTR field, [out] LPWSTR* value, [out] int* chars);

直接的方法是导入LocalAlloc函数,使用UnicodeEncoding.GetBytes将字符串转换为字节,并使用Marshall.Copy将它们复制到分配的内存中。