Ловля COMException определенный Код ошибки

Сравнение строк будет всегда полагаться полностью на среду выполнения (если строки не будут статически выделены, хотя потребность сравнить тех друг с другом спорна). Сравнение типов, однако, может быть сделано посредством динамического или статического связывания, и так или иначе это более эффективно для среды выполнения, чем сравнение отдельных символов в строке.

25
задан Ian 15 September 2009 в 09:32
поделиться

3 ответа

Код ошибки должен быть целым числом без знака; вы можете выполнить сравнение следующим образом:

try {
    // something
} catch (COMException ce) {
    if ((uint)ce.ErrorCode == 0x800A03EC) {
        // try something else 
    }
}
38
ответ дан 28 November 2019 в 20:53
поделиться

I actually managed to get it running on the system I needed and found the error code was -2146807284.

Looking at that, if I convert the 0x800A03EC to Binary, then treat it as 2's compliment, then you can calculate the value.

0
ответ дан 28 November 2019 в 20:53
поделиться

Значение HRESULT имеет 32 бита, разделенных на три поля: код серьезности, код объекта и код ошибки. Код серьезности указывает, представляет ли возвращаемое значение информацию, предупреждение или ошибку. Код объекта определяет область системы, ответственной за ошибку. Код ошибки - это уникальный номер, который присваивается для представления исключения. Каждому исключению сопоставляется отдельный HRESULT. Выдержка из: http://en.wikipedia.org/wiki/HRESULT

Насколько я понимаю, первая половина битов HRESULT может изменяться в зависимости от системы / процесса, вызывающего исключение. Вторая половина содержит тип ошибки.

Код должен выглядеть так:

try {
    // something
} catch (COMException ce) {
    if ((uint)ce.ErrorCode & 0x0000FFFF == 0x800A03EC) {
        // try something else 
    }
}

ПРИМЕЧАНИЕ: имейте в виду, что я не сторонник .NET, поэтому опасайтесь синтаксических ошибок в приведенном выше коде.

10
ответ дан 28 November 2019 в 20:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: