У меня есть COM-объект — сервер, который поддерживает
ISupportErrorinfo. Так как проект написан на (с использованием)
ATL, то возбуждаю исключение следующим образом:
...
wchar_t szError[100];
DWORD dwError = GetLastError();
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, &dwError, 0, 0, szError, 100, NULL);
Error(szError);
...
или
...
Error(L"VB is the most <censored> language!!!");
...
Теперь о
VB <вырезано цензурой>.
Пытаюсь сообщить об ошибке
Sub DoItWithService()
...
On Error GoTo ErrorView
If Not o Is Nothing Then
...
...
End If
ErrorView:
MsgBox Err.Description
End Sub
В итоге, если происходит ошибка, то выскакивает пустой MessageBox. Почему?
Зараннее благодарен.
Здравствуйте, dead_ricky, Вы писали:
_>У меня есть COM-объект — сервер, который поддерживает ISupportErrorinfo. Так как проект написан на (с использованием) ATL, то возбуждаю исключение следующим образом:
_>_> ...
_> wchar_t szError[100];
_> DWORD dwError = GetLastError();
_> FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, &dwError, 0, 0, szError, 100, NULL);
_> Error(szError);
_> ...
_>
Делай return Error(szError). И нечего на VB пенять, коли ... <censored>.
Здравствуйте, dead_ricky, Вы писали:
_>У меня есть COM-объект — сервер, который поддерживает ISupportErrorinfo. Так как проект написан на (с использованием) ATL, то возбуждаю исключение следующим образом:
_>_> DWORD dwError = GetLastError();
_> FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, &dwError, 0, 0, szError, 100, NULL);
_> Error(szError);
_>
Забыл сказать самое главное. Error() возвращает какой-то фиксированный код пользовательской ошибки. По правильному для ошибок WinAPI нужно возвращать код соответствующей ошибки Win32:
return HRESULT_FROM_WIN32(dwError);
Формировать вручную сообщение об ошибке и использовать ISupportErrorInfo в этом случае не требуется.