Я использую COM-объект cpp из кода C #.
Мой код c # выглядит так:
try
{
var res = myComServer.GetSomething();
}
catch (Exception e) { }
Однако исключение никогда не содержит никаких данных, которые я установил в cpp, в частности, мое сообщение об ошибке.
В моей стороне cpp я следил за несколькими примерами, которые я нашел в сети:
...
ICreateErrorInfo *pcerrinfo;
IErrorInfo *perrinfo;
HRESULT hr;
hr = CreateErrorInfo(&pcerrinfo);
pcerrinfo->SetDescription(L"C++ Exception");
hr = pcerrinfo->QueryInterface(IID_IErrorInfo, (LPVOID FAR*) &perrinfo);
if (SUCCEEDED(hr))
{
SetErrorInfo(0, perrinfo);
perrinfo->Release();
}
pcerrinfo->Release();
return E_FAIL; // E_FAIL or other appropriate failure code
...
Я что-то упустил?
Есть ли что-нибудь еще, что может повлиять на это, например, маршалинг, создание взаимодействия или атрибуты самого com-сервера?