Объединение значения GetLastaRasterror и пользовательского сообщения об ошибке

StackOverflow https://stackoverflow.com/questions/2747276

  •  02-10-2019
  •  | 
  •  

Вопрос

У меня есть функция, которая возвращает другое значение 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 и извлечь их позже? Код ценится.

Спасибо

Джесс.

Это было полезно?

Решение

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

return MAKELPARAM(GetLastError(), ERR_DB_NOT_OPEN);

int lasterror = LOWORD(result);
int code = HIWORD(result);

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top