سؤال

لدي وظيفة تُرجع قيمة 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 أرقام سداسية ، ثم يمكنك استخدام بعض وحدات الماكرو للنوافذ الجمع بينها وتقسيمها:

return MAKELPARAM(GetLastError(), ERR_DB_NOT_OPEN);

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

نصائح أخرى

أعلم أن هذا المنشور قديم ، ولكن في حالة ... يكمل إجابة مارك. تتوفر منطقة التعليمات البرمجية التالية لك لتحديد أخطاءك.

رموز الخطأ هي قيم 32 بت (Bit 31 هي البت الأكثر أهمية). Bit 29 محجوز لرموز الخطأ المعرفة من التطبيق ؛ لا يوجد رمز خطأ في النظام لديه مجموعة البت هذه. إذا كنت تحدد رمز خطأ للتطبيق الخاص بك ، فقم بتعيين هذا البت للإشارة إلى أن رمز الخطأ قد تم تعريفه بواسطة التطبيق الخاص بك ولضمان عدم تعارض رمز الخطأ الخاص بك مع أي رموز خطأ محددة في النظام.

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

يمكنك دمجها في سلسلة (صفيف Char) ثم تقسيمها من المتصل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top