Как проверить код ошибки для REGDB_E_CLASSNOTREG? - PullRequest
2 голосов
/ 17 октября 2011
try
{
    // call to Com Method
}
catch (COMException e)
{
    if (e.ErrorCode == 0x80040154) // REGDB_E_CLASSNOTREG.
    {
       // handle this error.
    }
}

Я бы хотел проверить, не вызвано ли исключение com из-за REGDB_E_CLASSNOTREG, и обработать его.Я пытался использовать приведенный выше код, но он выдает предупреждение:

Comparison to integral constant is useless; the constant is outside the range of type 'int'

Я считаю, что эта ошибка связана с тем, что 0x80040154 не находится в диапазоне Int32.

Можете ли вы предложить какое-либо возможное решение?или есть другой способ проверить это?

Ответы [ 3 ]

3 голосов
/ 17 октября 2011

Используйте ключевое слово unchecked :

        catch (COMException ex) {
            if (ex.ErrorCode == unchecked((int)0x80040514)) {
                //...
            }
        }
1 голос
/ 17 октября 2011

Сравнение с его целочисленным эквивалентом работает нормально:

if (e.ErrorCode == -2147287036) // REGDB_E_CLASSNOTREG.
{
   // handle this error.
}
0 голосов
/ 17 октября 2011

Вы также можете попробовать использовать некоторый текст, который отображается в сообщении об исключении / сообщении об ошибке, как показано ниже

try
 {  
   // call to Com Method
 } 
catch (COMException e) 
{ 
    if (e.ToString().Contains("Your Error Text here")) // REGDB_E_CLASSNOTREG. 
    {   
     // handle this error.
    }
 } 
...