ISupportErrorinfo и снова VB :)
От: dead_ricky  
Дата: 14.07.04 09:56
Оценка:
У меня есть 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. Почему?
Зараннее благодарен.
Re: ISupportErrorinfo и снова VB :)
От: algol Россия about:blank
Дата: 14.07.04 10:40
Оценка:
Здравствуйте, 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>.
Re: ISupportErrorinfo и снова VB :)
От: algol Россия about:blank
Дата: 15.07.04 07:59
Оценка:
Здравствуйте, 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 в этом случае не требуется.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.