C # cadena de clasificación y LocalAlloc
Tengo una devolución de llamada COM desde una DLL no administrada que necesito usar en C #. La DLL no administrada espera que el destinatario asigne memoria utilizandoLocalAlloc
(que la persona que llamaLocalFree
), rellenarlo conWSTR
y establecervalue
ychars
al puntero WSTR y la longitud de la cadena respectivamente.
Fragmento de código que intento convertir a 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;
}
¿Cuál sería el código C # equivalente?
EDITAR: Interfaz COM:
[id(2)] HRESULT GetString([in] LPCSTR field, [out] LPWSTR* value, [out] int* chars);