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