C # String Marshalling und LocalAlloc

Ich habe einen COM-Rückruf von einer nicht verwalteten DLL, die ich in C # verwenden muss. Die nicht verwaltete DLL erwartet, dass der Angerufene mit @ Speicher zuweisLocalAlloc (was der Anrufer wirdLocalFree), füllen Sie es mitWSTR und setvalue undchars zum WSTR-Zeiger bzw. zur Zeichenkettenlänge.

Code-Snippet Ich versuche, nach C # zu konvertieren:

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; 
}

Was wäre der äquivalente C # -Code?

EDIT: COM-Schnittstelle:

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage