Pregunta

Tengo una función que devuelve un valor DWORD diferente para cada caso hay un error. Así que tengo A continuación se definen:

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

Ahora, vuelvo esos valores cuando se produce un error. Tengo que devolver también el valor de GetLastError en la misma vuelta.

No, no puedo leerlo más tarde.

He intentado combinándolo diferentes maneras, por ejemplo:

return ERR_DB_NOT_OPEN + GetLastError();

y luego extraer el error restando el valor de ERR_DB_NOT_OPEN pero desde que tenga que utilizar esto en funciones en las que puede haber varios valores de retorno que puede ser bastante complejo para hacerlo.

¿Hay alguna manera de lograr esto? Es decir, combinar el valor + GetLastError y extraerlos después? Código es apreciado.

Gracias

Jess.

¿Fue útil?

Solución

De acuerdo con de Documentación de Microsoft , códigos de error del sistema fuera máximo en 15.999 (0x3E7F). Esto significa que tiene toda la palabra superior para jugar. Tendrá que acortar sus códigos de error para encajar en 4 dígitos hexadecimales, a continuación, puede utilizar algunas macros de Windows para combinar y dividir ellas:

return MAKELPARAM(GetLastError(), ERR_DB_NOT_OPEN);

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

Otros consejos

Sé que este post es viejo, pero por si acaso ... Como complemento de la respuesta de la marca. Siguiendo la región del código está disponible para que usted pueda definir sus propios errores.

Los códigos de error son valores de 32 bits (bit 31 es el bit más significativo). El bit 29 está reservado para los códigos de error definidos por la aplicación; sistema sin código de error tiene este conjunto de bits. Si está definiendo un código de error de su aplicación, establecer este bit para indicar que el código de error tiene sido definida por su aplicación y para asegurar que su código de error no es incompatible con cualquier código de error definidos por el sistema.

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

Puede combinarlos en una cadena (una matriz de caracteres) y luego separarlos de la persona que llama.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top