Объединение значения GetLastError и пользовательского сообщения об ошибке - PullRequest
1 голос
/ 30 апреля 2010

У меня есть функция, которая возвращает разные значения DWORD для каждого случая, когда есть ошибка. Итак, у меня есть следующие определения:

#define ERR_NO_DB_CONNECTION    0x90000
#define ERR_DB_NOT_OPEN         0x90001
#define ERR_DB_LOCKED           0x90002
#define ERR_DB_CONN_LOST        0x90003

Теперь я возвращаю эти значения при возникновении ошибки. Мне нужно также вернуть значение GetLastError в том же возвращении.

Нет, я не могу прочитать это позже.

Я пытался комбинировать это по-разному, например:

return ERR_DB_NOT_OPEN + GetLastError();

и затем извлеките ошибку, вычитая значение ERR_DB_NOT_OPEN, но так как мне нужно использовать это в функциях, где может быть несколько возвращаемых значений, это может быть довольно сложно сделать.

Есть ли способ достичь этого? Я имею в виду, объединить значение + GetLastError и извлечь их позже? Код приветствуется.

Спасибо

Jess.

Ответы [ 3 ]

1 голос
/ 01 мая 2010

В соответствии с документацией Microsoft системные коды ошибок макс. Равны 15999 (0x3E7F).Это означает, что у вас есть все верхнее слово для игры.Вам нужно будет сократить коды ошибок, чтобы они соответствовали четырем шестнадцатеричным цифрам, а затем вы можете использовать некоторые макросы Windows для их объединения и разделения:

1 голос
/ 22 мая 2015

Я знаю, что этот пост старый, но на всякий случай ... Дополняю ответ Марка. Для определения собственных ошибок доступен следующий код региона.

Коды ошибок являются 32-битными значениями (бит 31 является старшим значащим битом). Бит 29 зарезервирован для определяемых приложением кодов ошибок; нет системы Код ошибки имеет этот бит установлен. Если вы определяете код ошибки для ваше приложение, установите этот бит, чтобы указать, что код ошибки имеет был определен вашим приложением и чтобы убедиться, что ваш код ошибки не конфликтует ни с какими системными кодами ошибок.

https://msdn.microsoft.com/en-us/library/windows/desktop/ms680627%28v=vs.85%29.aspx

0 голосов
/ 01 мая 2010

Вы можете объединить их в строку (массив символов), а затем отделить их от вызывающей стороны.

...