السلام عليكم..
اخواني عندي برنامج مكتوب بالسي بلس بلس وفيه غلط مش عارفه ايش هوا؟؟
ممكن تساعدوني فمعرفة الغلط وتصحيحه؟؟
البرنامج موجود في المرفق..
دمتم بخير..
السلام عليكم..
اخواني عندي برنامج مكتوب بالسي بلس بلس وفيه غلط مش عارفه ايش هوا؟؟
ممكن تساعدوني فمعرفة الغلط وتصحيحه؟؟
البرنامج موجود في المرفق..
دمتم بخير..
يبدو أن الكود ليس لك ...
ليس من الصعب تتبع الكود لمعرفة مكان الخطأ
أسهل طريقة هي ملاحظة رسالة الخطأ وتتبعها
هنا سأذكر لك الطريقة التي أتبعتها فربما قد تفيد مستقبلاً في حالات آخرى
رسالة الخطأ عبارة عن MessageBox عنوانها Fatal Error و نصها CreateFile ثم يلي ذلك رسائل أخرى ...
بتفحص ملفات الكود , نجد إستدعاء لهذه الرسالة في الملف bmpio.c في الدالة
void fatal(LPTSTR info,HWND hwnd)
{
MessageBox(hwnd, info, "Fatal Error", MB_OK);
}بإعتبار أننا لم نواصل البحث في بقية الملفات و إعتبرنا مكان الرسالة هو المشار إليه سابقاً ..
نلاحظ أن نص الرسالة عبارة عن متغير info إذا نقوم بالبحث عن استدعاءات الدالة fatal وسنجد أكثر من إستدعاء في نفس الملف منها
if (hf == INVALID_HANDLE_VALUE)
fatal("CreateFile", hwnd);وهو في الدالة CreateBMPFile
نلاحظ قبل هذه الجملة الشرطية إستدعاء للتابع CreateFile
hf = CreateFile(pszFile, GENERIC_READ | GENERIC_WRITE, (DWORD) 0, (LPSECURITY_ATTRIBUTES) NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL);
بالامكان عمل نقطة توقف هنا ومعرفة نوع الخطأ الناتج عن إستدعاء التابع CreateFile لكن لا داعي لذلك حالياً فبملاحظة قيم عناصر الدالة نجد أن أغلبها لا مشكلة فيها , العنصر الوحيد الذي يدعو للشك هو pszFile .
بتتبع هذا العنصر ندرك أن القيم المسنده منه آتيه من خارج الدالة CreateBMPFile . نبحث عن إستدعاء لهذه الدالة فنجده في نفس الملف في الدالة dump_wnd
CreateBMPFile(hWnd, szFileName, pbmi, hbmWnd, hbmDC);
وبتتبع szFileName نجد أن القيمة المعطاة له هي من استدعاء للدالة dump_wnd وبالبحث في ملفات المشروع نجد الإستدعاء للدالة في الملف dyp.c في الدالة write_frame
dump_wnd(ghWnd,bmpfname);
وبتتبع قيمة bmpfname نجد هذا
sprintf(bmpfname,"%s\\%.4d.bmp", MOVIE_DIR, frame);
وهنا يتم اسناد الـ Filepath لـ bmpfname حيث MOVIE_DIR هو المجلد الذي يحوي الملف و frame هو اسم الملف
وبتتبع هاتين القيمتين نجد
#define MOVIE_DIR "f:\\movie"
وهنا ندرك أن إسم المجلد معطى مسبقاً في البرنامج و لم يتم التأكد من وجوده وهذه تعتبر جريمة ..
وللتأكد من عدم وجود أخطاء أخرى مؤقتاً نقوم بإعطاء MOVIE_DIR مجلد موجود فعلاً في الكمبيوتر ثم نقم باختبار الكود فنلاحظ إختفاء الأخطاء ...
قلت مؤقتاً لأنه يجب علينا حل المشكلة برمجياً وهناك عدة حلول منها إنشاء مجلد في المكان حيث يتواجد فيه برنامجنا أو أي حلول أخرى ...
طبعاً البرنامج يحتاج لتعديلات منها إستخدام thread لتقوم بعملية الرسم حتى لا يعلق البرنامج ...
الطريقة السابقة في معرفة مكان الخطأ هي أبسط الطرق والتي لا تحتاج لإستعمال الـ debugger و الـ break points أو تنفيذ الكود سطراً سطراً ....
"First they ignore you, then they laugh at you, then they attack you, then you win"
===
اقتباسحُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا
هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا
الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا
القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ
لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ
البردوني "أبو تمام وعروبة اليوم" 1971
===
اقتباسعبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــمو تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم
ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم
أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟
ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا
البردوني "نحن و الحاكمون "
إضافة :
نسيت أن أذكر أنه ربما تكون هناك أخطاء أخرى فمن ملاحظتي لهذا الجزء
if (hf == INVALID_HANDLE_VALUE)
fatal("CreateFile", hwnd);الطريقة التي تعامل بها المبرمج مع الخطأ الناتج من إستدعاء CreateFile كانت فقط إعطاء رسالة خطأ فقط وهذا بحد ذاته جريمة لا تغتفر فكأنه لا يأبه للخطأ ويجعل البرنامج يستمر في عمله !!!
لاحظت أيضا أن كل الإستداعاءات للدالة fatal تمت بنفس الطريقة !! فعلاً مصيبة !!!!!! ياللهول!
"First they ignore you, then they laugh at you, then they attack you, then you win"
===
اقتباسحُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا
هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا
الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا
القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ
لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ
البردوني "أبو تمام وعروبة اليوم" 1971
===
اقتباسعبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــمو تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم
ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم
أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟
ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا
البردوني "نحن و الحاكمون "
ابشرك لقينا الخطأ ..
الخطأ هو قريب مما قاله الاخ cipher فانت تكتب الصورة في مكان خاطئ على مايبدو ..
فعندك هذا الكود
void write_frame(void)
{
#define MOVIE_DIR "f:\\movie"
char bmpfname[80];
static int frame=0;
frame++;
sprintf(bmpfname,"one.bmp", 0, frame);
glFlush();
SWAPBUFFERS;
dump_wnd(ghWnd,bmpfname);
}في الملف dpy.c .. انا جعلت موقع حفظ الصورة افتراضي وهو نفس مجلد مشروعك ..
الان عندما تنفذ البرنامج .. سيتحرك الثعبان .. واذا اغلقت برنامجك ستجد صورة في مجلد مشروعك فيها صورة الشعبان النهائية ..
المشروع بالمرفقات .
( المشروع رائع ودسم :) )
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
عفوا عفوا .....
اعتذر ..
الاخ cipher ذكر الحل في المشاركة رقم 2 ... انا ما انتبهت زين ..
الاخ cipher هو الذي اعطاك الحل الصحيح
اسفين اخونا cipher .. حقك علينا :wacko:
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
اقتباسالخطأ هو قريب مما قاله الاخ cipher فانت تكتب الصورة في مكان خاطئ على مايبدو ..
:unsure:
وماذا كان ردي؟؟
في ردي وضحت للأخ كيف يتتبع رسالة الخطأ .. كان بامكاني تعديل الكود والإشارة لمكان الخطأ فقط ..
أيضا لاحظ الأخطاء الفادحة التي أشرت إليها في" مشاركة #3 " .. كيف يكتفي مبرمج بمعالجة الأخطاء بإعطاء رسالة MessageBox ثم يجعل الكود بعد رسالة الخطأ يتنفذ !!
شئ أخر. البرنامج يقوم بحفظ عدد من الصور على شكل frames باستخدام الدالة write_frame بينما في الكود
sprintf(bmpfname,"one.bmp", 0, frame);
سيقوم بعمل overwrite للصورة لعدة مرات والنتيجة النهائية ستكون صورة واحدة فقط في حين فكرة البرنامج ليست هكذا ...
بطئ البرنامج مشكل كبيرة بحد ذاتها ..
أيضاً هو يقوم بالتقاط صورة خارج حدود نافذة البرنامج وأظن أن تلك ليست فكرة البرنامج ...
بشكل عام هناك عدة أشياء يجب تغييرها في الكود ...
---
عذرنا أخي العزيز الشمري , كنت أكتب ردي في الوقت الذي كنت تكتب فيه ردك
حقك علي
"First they ignore you, then they laugh at you, then they attack you, then you win"
===
اقتباسحُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا
هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا
الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا
القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ
لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ
البردوني "أبو تمام وعروبة اليوم" 1971
===
اقتباسعبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــمو تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم
ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم
أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟
ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا
البردوني "نحن و الحاكمون "
اخواني..شكرا جزيلا لكم..
الله يديكم العافيه..
اختكم..M!Ss_Loly
هل أفهم أن الموضوع إنتهى فقط بعمل تعديل على خطأ واحد؟؟
هناك الكثير لعمله في الكود ...
تم تعديل هذه المشاركة بواسطة cipher في 30 يوليو 2006 في 11:23
"First they ignore you, then they laugh at you, then they attack you, then you win"
===
اقتباسحُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا
هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا
الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا
القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ
لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ
البردوني "أبو تمام وعروبة اليوم" 1971
===
اقتباسعبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــمو تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم
ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم
أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟
ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا
البردوني "نحن و الحاكمون "
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…