Есть ли перечисление системных кодов ошибок в .Net framework? - PullRequest
11 голосов
/ 08 августа 2011

У меня есть библиотечная функция, которая возвращает коды GetLastError ( такие вещи, как эти ). Мне нужно сравнить их с конкретными ошибками, такими как ERROR_INVALID_HANDLE. Однако я не чувствую себя комфортно, чтобы определить константы самостоятельно. Таким образом, вопрос в том, есть ли предопределенное перечисление для этой цели?

Ответы [ 4 ]

8 голосов
/ 08 августа 2011

Нет, вам придется сделать свой собственный.

3 голосов
/ 04 марта 2017

Я опубликовал пакет NuGet для этого:

Install-Package BetterWin32Errors

Сначала добавьте использование для библиотеки:

using BetterWin32Errors;

Тогда вы можете использовать это так:

if (!SomeWin32ApiCall(...))
{
    var error = Win32Exception.GetLastWin32Error();
    if (error == Win32Error.ERROR_FILE_NOT_FOUND)
    {
        // ...do something...
    }
    else if (error == Win32Error.ERROR_PATH_NOT_FOUND)
    {
        // ...do something else...
    }
    else
    {
        throw new Win32Exception(error);
    }
}

См. на сайте , где приведены дополнительные примеры использования библиотеки.

1 голос
/ 07 января 2014

Вы можете скопировать код из http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382.aspx, добавленного katmassage, в свой собственный класс SystemErrorCodes.Он содержит коды от 0 до 499. Это хороший стартер.Если у кого-то уже есть класс, содержащий также все коды, его код будет принят.

0 голосов
/ 15 октября 2018

Для этого можно использовать класс Win32Exception.

    /// <summary>
    /// Setting the system Date and Time
    /// </summary>
    /// <param name="dateAndTime">The date and time settings</param>
    /// <returns>Operation success</returns>
    public static bool SetSystemTimeAndDate(DateTime dateAndTime)
    {
        var newDateAndTime = new Win32SystemTimeStruct(dateAndTime);

        var ret = Win32ApiStub.SetSystemTime(ref newDateAndTime);
        if(!ret)
            ThrowExceptionForHr(Marshal.GetLastWin32Error());
        return ret;
    }

    /// <summary>
    /// This function checks an error code and throws a nice exception if the code is signifying an error.
    /// Do not confuse this with <see cref="Marshal.ThrowExceptionForHR"/> which gets error information out of the context of the current thread.
    /// </summary>
    /// <param name="nativeErrorCode">The HRESULT error code</param>
    public static void ThrowExceptionForHr(int nativeErrorCode)
    {
        if (nativeErrorCode != 0)
            throw new Win32Exception(nativeErrorCode);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...