Включение HResult в фактический код ошибки, Delphi

В определенный момент происходит EOleSysError, а код ошибки этого исключения - HRESULT. Есть ли способ, когда я могу превратить этот HResult обратно в код ошибки или строку?

2
nl ja de
Что именно ты имеешь ввиду? HRESULT - это код ошибки?
добавлено автор David Heffernan, источник

1 ответы

A HRESULT - это код ошибки. Его значение зависит от сделанного вызова. В COM возвращаются HRESULT, потому что исключения недопустимы. Чтобы обойти это, обычно вызывается OleCheck , который проверяет HRESULT и повышает и исключает, если это значение, отличное от S_OK . Это EOleSysError, который вы получаете. :)

Однако обратите внимание, что HRESULT уже является кодом ошибки. HRESULT - всего лишь целое число. Имя вводит в заблуждение, потому что H предполагает, что это дескриптор, но это не так.

Так что информации больше нет, чем сейчас. Значение HRESULT в сочетании с документацией API, которую вы вызываете, должно предоставить вам всю необходимую информацию.

6
добавлено
ошибка возникает, когда приложение пытается установить соединение с Outlook, если на компьютере не обнаружено или установлено Outlook. но означает ли это, что код ошибки всегда один и тот же на другом компьютере?
добавлено автор Michiel T, источник
да, поэтому я думал, что мне нужно разбить HRESULT, чтобы быть уверенным, что каждый раз поймаю ту же ошибку, но не нужно, если код ошибки останется прежним. Спасибо, парни!
добавлено автор Michiel T, источник
Для тех, кто был заинтересован, теперь я сделал SendDebug (IntToStr (HResultCode (EOleSysError (E) .ErrorCode))); который дал мне ошибку 499. И это оказалось CO_E_CLASSSTRING. Итак, теперь я использую: if (E - EOleSysError) и (EOleSysError (E) .ErrorCode = CO_E_CLASSSTRING), тогда ... Работает как шарм: D
добавлено автор Michiel T, источник
Не так много точек вызова OleCheck , так как у нас уже есть EOleSysError . Казалось бы, кто-то уже это сделал!
добавлено автор David Heffernan, источник
И HRESULT - это структурированное значение. Он состоит из разных компонентов. Он может быть декодирован. Некоторые соответствующие статьи: blogs.msdn.com/b/oldnewthing/archive/2006/11/03/& hellip;
добавлено автор David Heffernan, источник
Совершенно правдоподобно, что есть и другие коды ошибок, которые будут возвращены для разных, но подобных сбоев. Чрезвычайно трудно предсказать.
добавлено автор David Heffernan, источник
Спасибо, я знаю. Я уже редактировал.
добавлено автор GolezTrol, источник
Да, если возникает такая же ошибка, это должно привести к тому же HRESULT. Как я уже сказал, это фактический код ошибки, а не дескриптор.
добавлено автор GolezTrol, источник
Delphi & Lazarus
Delphi & Lazarus
274 участник(ов)

Чат про Delphi и Lazarus