Сравнение строк будет всегда полагаться полностью на среду выполнения (если строки не будут статически выделены, хотя потребность сравнить тех друг с другом спорна). Сравнение типов, однако, может быть сделано посредством динамического или статического связывания, и так или иначе это более эффективно для среды выполнения, чем сравнение отдельных символов в строке.
Код ошибки должен быть целым числом без знака; вы можете выполнить сравнение следующим образом:
try {
// something
} catch (COMException ce) {
if ((uint)ce.ErrorCode == 0x800A03EC) {
// try something else
}
}
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.
Значение 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, поэтому опасайтесь синтаксических ошибок в приведенном выше коде.