JAAS

إحترف كتابة البرامج وترجمتها ؟!

7 ردود في هذا الموضوع

السلام عليكم ورحمة الله ,,,

في البداية قررت كتابة الموضوع بعد أن شاهدت برنامج غريب ؟

هذا البرنامج عبارة عن باحث للملفات فقط وهو موزع على النت بشكل نهائي أي نسخة التوزيع النهائي

ومشكلة البرنامج هي في الحجم ؟ فحجم البرنامج تقريبا 1.2 ميجا بايت وهو في الأصل لا يتعدى 680 كيلوبايت

والمشكلة الثانية في أن البرنامج يقوم بتحميل مكاتب ربط لا يستخدمها أصلا ؟ وأخطاء أخرى

المهم أني حاولت إكتشاف لغز هذا البرنامج .. ليظهر في النهاية أنة خطأ كبير في خصائص ترجمة البرنامج!

وأردت طرح هذا الموضوع لكي لا يقع في هذا الخطأ أحد أعضاء المنتدى ؟

أولاً : خيارات الرابط وخصائصة

شغل برنامج الفيجول سي6 وإختر مشروع Win32 Application ثم قم بتسمية البرنامج Mypro مثلا وإضغط Ok

ستظهر لك نافذة إختر منها الخيار الأول مشروع فارغ An empty project

ستلاحظ أن المترجم فتح لك مشروع فارغ ... بعد ذلك إختر من قائمة مترجم الفيجول سي الأمر File ثم New

ستظهر لك نافذة إختر منها ملف مصدري بهذا الشكل

cjaasc0A.gif

ثم إضغط OK ليتم إضافة الملف إلى المشروع

إفتح الملف المصدري :

سنقوم بكتابة برنامج بسيط عبارة عن مسج بمعنى أننا سنستخدم الدالة الرئيسية لبرامج وندوز وهي WinMain

ودالة إظهار المسج وهي MessageBox... إكتب الكود التالي

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR     lpCmdLine,
                    int       nCmdShow)
{

MessageBox (NULL,"Win32",NULL,MB_OK);
return 0;
}

ثم ترجم البرنامج .. من قائمة Build ثم Build Mypro.exe

الآن كيف ترجمت البرنامج ؟ هل تعلم أنك إستخدمت أكثر من خيار للرابط .. تابع

في أول سطر كتبت #include <windows.h> وهو ملف الهدر أو الترويسة لدالة المسج

وبعدها قام المترجم بشكل إفتراضي بتحديد تعريف المكتبة وهي user32.lib

ثم قام الرابط بربط البرنامج مع المكتبة user32.dll

قد تكون الطريقة غير واضحة لأننا إستخدمنا دالة لمكتبة إفتراضية

أرجع للكود وأكتب هذة الدالة PlaySound وهي دالة لتشغيل ملف صوتي

ليصبح شكل البرنامج بهذة الطريقة

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR     lpCmdLine,
                    int       nCmdShow)
{

PlaySound ("my.wav",NULL,0x8);

return 0;
}

إذا ترجمت البرنامج سيظهر أكثر من خطأ لأنك لم تعرف ملف الترويسة للدالة PlaySound

إبحث عن الدالة ستجدها في الملف mmsystem.h .. عرف هذا الملف في بداية البرنامج بإستخدام #include

ثم ترجم البرنامج .. سيظهر خطأ لأنك لم تقم بتعريف المكتبة التي تحتوي الدالة

بمعنى أن الدالة موجودة في المكتبة winmm.dll وتعريفها للرابط يكون winmm.lib

أسهل طريقة لتعريف المكتبة ... من قائمة Project إختر Settings ثم حدد Link

وأكتب تعريف المكتبة بجانب التعاريف الإفتراضية بهذا الشكل

cjaas0B.gif

ملاحظة : طبق هذة العملية على كل نسخ البرنامج .. بمعنى النسخة Win32 Debug وWin32 Release

يتم إختيار النسخة في أعلى النافذة عند الخيار Settings For

والآن ترجم البرنامج ... ليظهر لك المترجم إتمام عملية الترجمة بنجاح

إذهب إلى مجلد المشروع في مثالنا X:\mypro ستجد مجلد Debug بداخلة Mypro.exe

هذا هو برنامجنا بعد الترجمة ... ولكنة ليس النسخة النهائية ؟ لاحظ حجم البرنامج 152 كيلوبايت ..معقولة

إرجع لنافذة الفيجول سي وإختر من القائمة Build ثم Set Active Configuration

ستظهر لك نافذة بها خيارين الأول Mypro.exe Release والثاني Mypro.exe Debug

إختر الخيار الأول ثم أعد ترجمة البرنامج وإذهب إلى مجلد البرنامج لتجد المجلد Release وبة الملف exe

حجم البرنامج 24 KB وهو حجم قد يكون معقول

ماذا لو أردت توزيع البرنامج بشكل نهائي ؟

خيارات المترجم وخصائصة :

خيارت المترجم كثيرة تقريبا 74 ... منها مثلا #pragma warning لتحديد مستوى التحذير

ولابد لأي شخص يريد إحتراف اللغة من فهم أغلب هذة التعليمات

وسأشرح في هذا الموضوع أهمها :

توجد ثلاث طرق لتحديد خصائص المترجم وهي:

عن طريق الكود داخل البرنامج + عن طريق الدوس +عن طريق نافذة خصائص البرنامج

إفتح المشروع الخاص بناء ومن قائمة project إختر Settings ثم حدد c\c++

cjaas0C.gif

تختار من النافذة أي قسم من أقسام المترجم

ثم تحدد الخصائص وتغيرها .. وأي تغيير في الخصائص العامة سيحدث تغيير في رموز المترجم

بمعنى أنك تستطيع أن تغير إما في الرموز أو الخصائص وكلا الطريقيتن نفس الشيء

الخيار Optimizations وإختصارة O/ :

إما أن يكون Maximize Speed ورمزة O2/

أو Minimize Size ورمزة O1/

O2 معناة ترجمة البرنامج لأسرع تنفيذ والخيار O1 ترجمة البرنامج لأصغر حجم

وأعتقد أنهما نفس الشيء بمعنى أنك تختار إما يكون البرنامج سريع أو صغير ؟؟

أغلب البرامج التجارية تستخدم O2 ولكني قرأت مقال في أحد الكتب أن مايكروسفت تكتب برامجها

تحت الخيار O1 وإذا أردت تقليد مايكروسفت إستخدم هذا الخيار ,, وإلى إستخدم الخيار الثاني

ونفس التغيير بالكود #pragma optimize

الإختيار Warning level :

مستوى الإنذار بمعنى متى تريد من المترجم أن يعتبر الكود على أنة

إنذار لخطأ ... أفضل إختيار هو level1

لتغيير هذا الإختيار بالكود : #pragma warning

الآن أنظر للخيار الأخير : WIN32,NDEBUG,_WINDOWS,_MBCS

معنى الكلمة _MBCS أنك تريد إستخدام الحروف الموسعة وليس ترميز اليونيكود

إذا أردت ترميز اليونيكود غير إلى _UNICODE

هذة أهم النقاط في هذة النافذة

إرجع إلى الصورة ومن قائمة أقسام وخصائص المترجم إختر القسم Code Generation

لاحظ خصائص على يمين النافذة Use run-time library ينقسم إلى 6 ويالي يهمنا 3 وهم

Single-Threaded

MultitThreaded

MultitThreaded DLL

هذة 3 الإختيارات خاصة بالأكواد التي ستضاف إلى البرنامج

مثل تعليمات المايكرو strcpy .. بمعنى أي كود تكتبة في البرنامج غير دوال API

بإختصار توجد 3 مكاتب تشغيل قياسية في لغة السي وهي LIBC.LIB -LIBCMT.LIB -MSVCRT.LIB

إذا إخترت الإختيار الأول وهو Single-Threaded سيتم ربط البرنامج مع المكتبة LIBC.LIB

وخصائص هذة المكتبة أن الأكواد ستضاف إلى نفس ثريد البرنامج بمعنى أنها ستنفذ في وسط البرنامج

وأي خطأ أو تأخر في التنفيذ سيحسب من وقت البرنامج !

الإختيار الثاني MultitThreaded المكتبة LIBCMT.LIB

خصائصها أن أي كود مضاف من المترجم سيتم تنفيذة خارج ثريد البرنامج ولن يأثر على خط سير

البرنامج ووقتة ... وأعتقد أنة أفضل خيار في بعض الحالات ؟

الإختيار الثالث MultitThreaded DLL المكتبة MSVCRT.LIB

لن يكتب المترجم أي كود إضافي في البرنامج ولكن سيتم ربط برنامجك مع مكتبة ربط الخاصة

بلغة السي++ وهي MSVCRT.DLL وأكيد هذة المكتبة متوفرة في أغلب الأجهزة

والسؤال بعد هذة المقدمة ماذا أختار ؟؟

دائما الإختيار الأول هو أضمن خيار 100%100 إذا لم تستخدم المايكرو وأوامر المترجم بكثرة

الإختيار الثاني أكيد مضمون وتقوم بإختيارة إذا إستخدمت أوامر المترجم بشكل كبير ولا تريدها أن تقلل سرعة البرنامج

الإختيار الثالث إذا أردت تصغير حجم برنامجك بشكل كبير ولكن مع ضمان وجود المكتبة MSVCRT.DLL

أما عن البرامج التجارية وبرامج مايكروسف فهذا الإختيار يكون على حسب حجم البرنامج

وهذا مالاحظتة !

---------

بالتأكيد لم ننهي الموضوع ..... ومازال الموضوع في بدايتة :)

وبالتوفيق

2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الإرادة تحـــقق السيـــادة

:)

......................................

علينا بافتتاح مكتبة الدروس بسرعة البرق حتى نضيف اليها هذا الابداع ,, أخي jaas لاأعلم من أين أتيت بهذه الارادة الفولاذية ماشاء الله تبارك الله ,, قليل الكلام كثير العمل ,,

وبالله العظيم بسبب انجازاتك الواضحة هنا ,, اطلب مني أن أساعدك في أي شيء وسأتفرغ له ولو شهر ,, فقط اطلب ,, وبالمناسبة أنا جاد في ذلك ,,

ودعنا نكن واضحين ,, موضوع النهضة العلمية لأمتنا يحتاج لتنسيق وأنا مشوش الذهن ومضطرب في مجالات كثيرة ,, لذا أرجو أن تتكرم وتضع خطة ولو بسيطة في طرح دروس تكون ذات أكبر أهمية ممكنة في الفيجوال سي++ ,, واطلب ماتريد أن تكون بالصوت والصورة أم على هيئة دروس فقط كالتي تكتبها أم في ملفات PDF ,, وسأنفذ فورا ,,

أنا أنتظر ردك وأنا جاد هذه المرة فيما أقول ,, ولن أفعل الا ماتقوله لي ,,

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

تصفيق حار لك اخي jaas

ولي عوده لبعض الاستفسارات

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أخي هيثم .. بالنسبة للطلب .. فأنا لا أجد أي طلب

لأن مجهودك واضح في المنتدى ولا يخفى على أحد ... فكيف تريدني أن أكلفك بمهمة:)

وإعكس السؤال ... هل تريد مني أنا أي خدمة للمنتدى أو للأمة بشكل عام . تفضل

بالنسبة للدروس ؟

دائما كنت أقرأ مواضيعك وتحمسك الزائد لدروس ( بالصوت و الصورة )

وبكل صراحة إسمع رأيي

لو وضعت درست بسيط بالصوت و الصورة .. فكم حجمة .. وكم مدة تنزيلة وخاصة لأصحاب الديل أب أو 56 كيلوبايت

أعتقد أن أعضاء المنتدى تقريبا 40% يملكون خط إنترنت سريع DSL

أي أن الذين سيستفيدون من هذة الدروس 40%

ماذا لو وضعت الدروس في كتاب .. مثل ملفات أكرويات PDF أو أي نوع آخر من الكتب

أعتقد أن الذين يملكون هذة البرامج .. 85% .. والبقية لا يعرفون ماهي ؟؟!

أي أنا المستفيدين من المكتبة 85%

الحل الأسهل .. والأنجح صفحات إنترنت HTML

ماذا ينقص هذة اللغة لنشر الكتب ؟

تعمل في كل الأنظمة

100%100 من مستخدمين الإنترنت يستطيعو الوصول لللكتاب

أصغر الكتب في الحجم من بين كل التقنيات التي ذكرت

بالإضافة إلى سهولة تصميمها و وضوح محتوياتها

هذا مالدي لأقولة ,,, وإلى اللقاء

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

تابع الموضوع :

تعلمنا في الدرس السابق أن لخصائص المترجم رموز مثل O/ و W/ و ML/ ....إلى آخرة

وسأضع الآن بقية خصائص المترجم بطريقة الرموز ... لأنها أسهل في الإضافة .

======================================

C/

خصائص التعليقات في المترجم - وطريقة حفظها في الملف المصدري

D/

تعريف مايكرو جديد أو رمز جديد

EH/

خصائص معالجة الإستثنائات في الملف التنفيذي

F/

تحديد حجم مكدس البرنامج بالبايت (حجم المكدس الإفتراضي = 1ميجابايت )

FD/

تحديد قاعدة بيانات للبرنامج

FE/

تغيير إسم الملف التنفيذي الناتج عن الترجمة

FM/

إنشاء ملف تخطيط لذاكرة البرنامج (يستخدم في فحص البرامج )

FR/

تحديد مشغل الملف الناتج(مثلا ترجمة ملف من نوع Dll تحدد البرنامج المشغل للملف )

G/

تحديد خيار ترجمة البرنامج .. إلى المعالجات مثل:

GB = Blend - G6=Pentium Pro -G5=Pentium -G3=80386 - G4=80486

i/

بحث عن الملفات المضافة إلى المشروع بتحديد المسار

J/

تحديد خيار التأشير للمتغيرات (مثل المتغير char ) فهذا الإختيار يمكنك من جعل هذا المتغير

يمثل القيم السالبة والموجبة أو الموجبة فقط مثلا يتحول إلىTCHAR

TC/

تحديد الملفات المصدرية على أنها ملفات لغة السي

TP/

تحديد الملفات المصدرية على أنها ملفات لغة السي++

=================================

يتبع /3 - إلى أن نكمل أغلب خصائص المترجم + الرابط في الفيجول سي

بإذن الله

-

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

هذا هو الابداع ربنا يخليك لينا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .