Символические имена для кодов ошибок COMException HRESULT в .NET - PullRequest
3 голосов
/ 29 августа 2010

Я хотел бы иметь возможность использовать стандартные символические имена для HRESULT, возвращаемых компонентами COM в моем .NET-коде.Например, я хотел бы иметь возможность написать код, подобный этому:

try {
    someComObject->DoSomething();
}
catch (COMException ex) {
    if (ex.ErrorCode == E_FAIL) {
        HandleFail();
    }
    else if (ex.ErrorCode == E_OUTOFMEMORY) {
        HandleOutOfMemory();
    }
    else {
        HandleComError(ex.ErrorCode);
    }
}

Однако я не могу найти ни одного места в средах .NET, где бы такие символы, как E_FAIL, E_OUTOFMEMORY, E_UNEXPECTED и т. Д.определены.Для родных приложений Win32 можно получить определения из(см. http://msdn.microsoft.com/en-us/library/aa378137(VS.85).aspx).

Я, безусловно, могу определить их сам, где бы они мне ни понадобились, например:

int E_FAIL = unchecked((int)0x80004005L);

Но я бы предпочел получить определения из стандартного места, если оно доступноКажется, я когда-то нашел их где-то определенными, но мои поиски в MSDN сейчас их не находят.

Есть ли где-то в библиотеках .NET набор таких определений?

1 Ответ

2 голосов
/ 29 августа 2010

Я не думаю, что есть один в самой структуре.Может быть, вы нашли этот список на pinvoke.net .Не беспокойтесь об изменениях значений.Значения в заголовочном файле C компилируются в приложения, поэтому их нельзя изменить, не нарушая все существующие COM-приложения.

Также вы не получите COMException для E_OUTOFMEMORY.Это сгенерирует OutOfMemoryExcetpion.Время выполнения отобразит HRESULTS, о котором оно знает, в значимые исключения.См. определение сопоставления в MSDN.

...