الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

جواب لو سمحتو

بدأه NOUR ALDEEN في 26 يونيو 2011 · 17 رد · 616 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

إخواني أنا مبرمج C#

ومستواي في هذه اللغة لابأس به

وبعد عمل طويل معها تبين لي أنها لغة لا تستطيع صنع أي شيء

يعتمد على السرعة في المعالجة وأنها لاتستطيع صنع برامج عالية المستوى

مثل برامج الأنتي فيروس وأنظمة التشغيل

ولقد قررت الدخول في عالم الـC++

وتعلمت مبادئها وتعلمت القليل فيها

آسف على الإطالة وهذه أسئلتي

أريد تعلم برمجة برامج الويندوز

وأريد معرفة هل برامجة الويندوز لاتتم إلا عن طريق الـAPI

وأريد تعلم كيفية برمجة الواجهات في ويندوز بطريقة إحترافية

وجميلة

آسف على الإطالة وسوء التعبير

Be the change you want to see in the world


#2

السلام عليكم ورحمه الله وبركاته

اخي من قال انها لغة لاتستطيع صنع اي شيء يعتمد على السرعة في المعالجة؟!! وانها لاتستطيع صنع برامج عالية المستوى .. اذكر قبل ايام وخلال مشاهدتي لفديو وكان يتكلم فيه المطور Hansleman عن تطوير اللغات وما وصلت اليه الدوت نت, وذكر فيه انه قام مره بكتابة كود لغرض معين وكتب 500 سطر ومن ثم تعقد عليه امر و قال تبا للدوت نت وبعد فتره قابل الخبير Hejlesberg احد مشرفي لغة السي شارب وحكى لها الامر من ثم قام الاخير بتحسين الكود باستخدام ال Lamdba وقلص الكود الى 300 سطر من ثم قال له جملة لم ينساها ولن ينساه هانسلمان "المشكلة ليست في اللغات .. قد تكون المشكلة فينا كمبرمجين" وفعلا ادرك المغزى, واقولها لك اخي يمكن المشكلة فيك لو تعلم ان في اصدار الدوت نت 2.0 اكثر من 13000 فئة (كلاس) فكم استخدمنا؟!! يمكن هناك مكتبات تحوي فئات ودوال تقوم بالمطلوب بس نحن لا نعلم بها .. واقولها مرة اخرى قد تكون المشكلة فينا كمبرمجين!!

2

.:: Wish to become better and better ::.

#3
اقتباس
يعتمد على السرعة في المعالجة وأنها لاتستطيع صنع برامج عالية المستوى مثل برامج الأنتي فيروس وأنظمة التشغيل

تتكلم عن السرعه، يوجد كرنل مبني بإستخدام لغة c# و spec# إسمه singularity أنصحك بالإطلاع عليه.

كما قال الأخ VB Helper اللغه يمكنها فعل ما تريد فقط عليك ان تعرف الوسيله المناسبه و فى اسوء الأحوال إستخدم Emit.

و الله ولي التوفيق

مدونتي: C++ Tips and Tricks

#4

السرعة لامشكلة

والنت فيرمورك أنا أريد البرنامج ناتيف

كيف يكون ذلك

Be the change you want to see in the world


#5

أو هل يمكن برمجة برنامج شبيه بنورتون جوست أو بارتشن ماجيك

أو شبيه هذه البرامج

Be the change you want to see in the world


#6
اقتباس
أنا أريد البرنامج ناتيف

يمكنك تحويل برنامجك للنسخه الـ native (التى تتلائم مع مكونات جهازك) بإستخدام أداة Ngen، للعلم عندما تقوم بتثبيت نسخة الدوت نت على جهازك فأخر خطوه يقوم بها الـ installer هي تحويل المكتبات التى تم تثبيتها للنسخه الـ native.

اقتباس
أو هل يمكن برمجة برنامج شبيه بنورتون جوست أو بارتشن ماجيك

نعم يمكنك بإستخدام P/Invoke.

و الله ولي التوفيق

تم تعديل هذه المشاركة بواسطة محمد علاء الدين في 27 يونيو 2011 في 17:54

1

مدونتي: C++ Tips and Tricks

#7

لم أفهم

Be the change you want to see in the world


#8
اقتباس

وأريد معرفة هل برامجة الويندوز لاتتم إلا عن طريق الـAPI

ما تحتاج اليه هو نظام نوافذ مثل WIN32API , QT , Wxwidgets وغيرهم

يمكننى ان انصحك بالتعمق فى ++c واستخدام منصة العمل المشهورة والمحمولة والسهلة QT

اقتباس

(التى تتلائم مع مكونات جهازك)

طبعا الاخ محمد علاء الدين وضح لك فى هذه الكلمة البسيطة ان برنامجك لن يكون محمولا portable حتى على الاجهزة التى تعمل بنظام windows

وربما تحدث مشاكل

بالتوفيق


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#9

السلام عليكم ورحمه الله وبركاته

اخي يمكنك استخدام ال P\Invoke كما ذكر الاخ محمد علاء الدين سابقا وهذا الرابط فيه نقاش حول كيفية استدعاء كود مكتوب بالسي من السي شارب /index.php?showtopic=244276

.:: Wish to become better and better ::.

#10
اقتباس
(التى تتلائم مع مكونات جهازك)
اقتباس
طبعا الاخ محمد علاء الدين وضح لك فى هذه الكلمة البسيطة ان برنامجك لن يكون محمولا portable حتى على الاجهزة التى تعمل بنظام windows

وربما تحدث مشاكل

القصد من قولي - فى الإقتباس الأول - انه إذا كان جهازك يدعم SSE2 فالكود الناتج سيقوم بإستخدامها، و إذا حدث ان تم نقل الملف التنفيذي لجهاز يحتوي على SSE4.1 فلن يتم إستخدامها لأن الملف التنفيذى لم يتم تصميمه ليهدف لإستخدام هذه التقنيه، هذا الكلام ينطبق ايضا على جميع الملفات التنفيذيه التى يتم برمجتها من أى لغه أخرى.

هنا تأتي الأفضليه للغه مثل الـ #C حيث الـ byte code الذى ستحتاج لإستخدامه هو فقط ما سيتم تحويله للنسخه التنفيذيه - بإستخدام JIT.

يوجد سؤال داخل SO يدور حول JIT

تم تعديل هذه المشاركة بواسطة محمد علاء الدين في 29 يونيو 2011 في 05:00

2

مدونتي: C++ Tips and Tricks

#11
اقتباس

وهذا الرابط فيه نقاش حول كيفية استدعاء كود مكتوب بالسي من السي شارب

اذا كان فى النهاية سيستدعى كود بالسى اذا هو مضطر الى تعلمها وبما انه سيتعلمها فيفضل ان يكتب بها البرنامج مباشرة أليس كذلك ؟

اخى محمد علاء

كل ما اعرفه هو انه يريد برمجة مضاد للفيروسات ويكون الملف native واظن انه افضل ادوات فى هذه الحالة ++c/c وبعض ال assembly

لماذا يدخل فى متاهة استخدام السى داخل #c وبعدها ال assembly وبعدها تحويل الملف الى native بالادوات السابقة ثم يبحث عن طريقة لتشغيل البرنامج على انظمة اخرى

طبعا اشهرها linux وليكن مثلا استخدام mono ولماذا فى الاساس نحرمه من مهارات وخبرات وجمال لغة ال ++c وال low-level programming الذى يجعلك

على دراية شبه كاملة بمايحدث داخل الكود او الدوال الجاهزة من اللغة

اذا كان سيدخل الى عالم الفيروسات ومكافحتها لامفر من مروره على ++c و Assembly (هذا رأيى ومتمسك به :mad: )

وفى النهاية تقبلوا تحياتى

1


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#12

السلام عليكم

شكراً لك أخي محمد فتحي

هذا الجواب الذي كنت أبحث عنه

لكن هل هناك سبيل لتعلم هذا

Be the change you want to see in the world


#13
اقتباس
لماذا يدخل فى متاهة استخدام السى داخل #c وبعدها ال assembly وبعدها تحويل الملف الى native بالادوات السابقة ثم يبحث عن طريقة لتشغيل البرنامج على انظمة اخرى

لأاحظ انك تتكلم عن مضاد فيروسات، التى هي فى حد ذاتها إسلوب عملها سيختلف من نظام تشغيل لأخر و بالتالي مضاد فيروسات لويندوز سيختلف تماما عنه لـ mac.

طيب دعنا نأخذ الأمور من وجهة نظرك سيذهب و يتعلم ++c و بعدها بختار framework و ليكن qt و يصنع مضاد الفيروسات و يقوم بتحويله لنسخه تنفيذيه و يقوم بتشغيله على عدة اجهزه بإمكانيات مختلفه، هل البرنامج سيستغل كل تلك الإمكانيات؟ بالطبع لو كان هو وضعها فى الحسبان داخل برنامجه فسيتم إستخدامها و إن لم يضعها فلن يتم إستخدامها.

نأتي الأن لنسخه البرنامج بلغة مثل الـ #c، سيكتب برنامجه و يحوله للنسخه التنفيذيه و يقوم بتثبيته على الأجهزه السابق ذكرها، أخر عملية سيقوم بها الـ installer هي تحويل نسخه البرنامج لـ native مستغلا كل امكانيات الجهاز التى يتم التثبيت عليه، و إذا قمت بتثبيت البرنامج بعد 20 عام على super computer فسيتم إستغلال امكانياته السوبر فى النسخه الـ native التى تم بناءها أثناء التثبيت.

لذا مقارنة بين نسختي البرنامج(qt و #c) فى حالة هذا البرنامج:

1- فى QT اهتمامك بالأمور الـ Low Level شئ أساسي لجعل برنامجك يعمل افضل ما يمكن، فى #c كل تركيزك على بناء منتج معين و عمليات الـ low level سيتم الإهتمام بها من قبل أدوات أخرى ستجعله افضل مما تريد.

2- فى QT تركيزك كان فى العتاد بالإضافه للبرنامج - إستخدام SSE أو MMX أو كلاهما للإستفاده من إمكانيات الجهاز و هذا سيؤدي بدوره لكبرحجم الملف التنفيذي الناتج لوجود كود يتعامل مع أكثر من عتاد، فى الـ #C مثل هذه الأمور لا تهمك حيث عندما سيتم تحويل برنامجك للنسخه التنفيذه اثناء التثبيت سيتم وضع كل هذه الأمور فى الحسبان.

خلاصة الكلام استخدم الأداه المناسبه لما تريد فعله و إن كانت كل الادوات مناسبه فقم بتقسيم عملك على اجزاء و وزع كل جزء على الأداه الأفضل له.

فى برنامج مضاد الفيروسات ستحتاج لبناء driver حينها إستخدم c++/c، و ستحتاج لبناء UI إستخدم C#/QT، كل الأدوات ستؤدى لما تريد و لكن السؤال أيهم سيؤديها أفضل؟ هذا ما تحتاج للتفكير به كي لا تضيع وقتك فى تعلم شئ لن تحتاجه الأن.

و الله ولي التوفيق

2

مدونتي: C++ Tips and Tricks

#14

اذكر ان هناك فئة بالاسم

QFileSystemWatcher

وهذه مهمتها حسب شرح الكتاب

اقتباس

. And the QFileSystemWatcher class can notify us when a change occurs to a directory or to a file, by emitting directoryChanged() and fileChanged() signals.

وبما ان المنصة نفسها Qt محمولة فأظن ان هذه الفئة رائعة جدا جدا

وان استخدمتها فى windows فلايتم عليها أى تغيير فى mac

اقتباس

عندما سيتم تحويل برنامجك للنسخه التنفيذيه اثناء التثبيت سيتم وضع كل هذه الأمور فى الحسبان.

اظن فى الحسبان هنا تعنى تجميع الدوال فى مكتبات ديناميكية ويتم استدعائها من الملف التنفيذى الصغير جدا عندها

هذا اقصى ما يمكن ان يقدمه له ال installer لتصغير الحجم دون ان يراه مابالك لو كتبها وصدرها هو بيده ؟ اظنها تضيف قوة له ولبرنامجه

وأراها سهلة

اقتباس

بالطبع لو كان هو وضعها فى الحسبان داخل برنامجه فسيتم إستخدامها و إن لم يضعها فلن يتم إستخدامها.

هذا احد مكاسبه من ++c سيتعلم كيف يضعها فى الحسبان (اسلوب برمجى)

اقتباس

نأتي الأن لنسخه البرنامج بلغة مثل الـ #c، سيكتب برنامجه و يحوله للنسخه التنفيذيه و يقوم بتثبيته على الأجهزه السابق ذكرها، أخر عملية سيقوم بها الـ installer هي تحويل نسخه البرنامج لـ native مستغلا كل امكانيات الجهاز التى يتم التثبيت عليه، و إذا قمت بتثبيت البرنامج بعد 20 عام على super computer فسيتم إستغلال امكانياته السوبر فى النسخه الـ native التى تم بناءها أثناء التثبيت.

وبعد كل هذا لوقام نفس الشخص بكتابة نفس البرنامج بال ++c و Qt هل تعتقد ايهما اسرع وأكفأ ؟

لا تنسى ان #c لغة pure-object-oriented مثل الجافا وهى تقليد للجافا فى الاساس

و ++c تدعم ال procedural programming و ال generic programming(templates) ومعشوقة الاخ خالد الشايع meta-programming

هذه مميزات مفيدة جدا فى حالته (مكافح الفيروسات)

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

اقتباس

فى برنامج مضاد الفيروسات ستحتاج لبناء driver حينها إستخدم c++/c، و ستحتاج لبناء UI إستخدم C#/QT، كل الأدوات ستؤدى لما تريد و لكن السؤال أيهم سيؤديها أفضل؟ هذا ما تحتاج للتفكير به كي لا تضيع وقتك فى تعلم شئ لن تحتاجه الأن.

+10

ولكن نسيت انه فى الاول والاخر سيتعلم ال ++c/c ويدمج الكود داخل #c سواء لكتابة ال driver او لغيره

ان كان احد اسباب كتابته للبرنامج مستخدما #c هو سهولتها فانا استخدمت الاثنين ورأيى أن Qt أسهل

وان كان الدعم بالادوات الجاهزة ايضا رأيى أن Qt أفضل

واندهشت عندما رأيت الفئة QFileSystemWatcher فأول ما قرأت اسمها فكرت فعلا فى مكافح الفيروسات فهى توفر الكثير وتقدم خدمة كبيرة (تعمل على جميع الانظمة التى تدعم Qt)

ولكن اصطدمت بال Assembly ولازلت أغازلها عن بعد :)

لو انه برنامج تعليمى استخدم ماتشاء اما لو تجارى فانصحك بالقويتين والضرورتين ايضا ++c/c و Assembly

هذا ما عندى ولكم تحياتى

1


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#15
اقتباس

وبما ان المنصة نفسها Qt محمولة فأظن ان هذه الفئة رائعة جدا جدا

وان استخدمتها فى windows فلايتم عليها أى تغيير فى mac

أضحك الله سنك، مضاد الفيروسات لن يستخدم مثل هذه الفئات و لكنه سيقوم بعمل intercept للملف التنفيذي قبل تنفيذه و مثل هذه الأمور تكون على مستوي الكرنل و ليس user.

اقتباس

اظن فى الحسبان هنا تعنى تجميع الدوال فى مكتبات ديناميكية ويتم استدعائها من الملف التنفيذى الصغير جدا عندها

هذا اقصى ما يمكن ان يقدمه له ال installer لتصغير الحجم دون ان يراه مابالك لو كتبها وصدرها هو بيده ؟ اظنها تضيف قوة له ولبرنامجه

وأراها سهلة

عندما يتم تثبيت الدوت نت يتم استدعاء Ngen و يتم تمرير جمبع المكتبات التى تم تثبيتها ليتم تحويلها للنسخه الـ native، و هذا تماما ما سيقوم به الـ installer حيث سيقوم بإستدعاء nagen و يقوم بتمرير برنامجك فى نسخته الـ managed و سيتم انشاء نسخه native منه داخل الـ cache الخاصه بـ GAC.

انا افترضت عندما تم ذكر انه يريد برمجة مضاد فيروسات انه سيتعلم ++C و الهدف النهائي من دخولي للنقاش ليس من هي اللغه الأفضل و لكن ما هي الأداه الأصلح في بناءه للتطبيق الخاص به.

أغلب الوقت انا استخدم ++C و لكن هذا لا يمنع اني استخدم #C و Emit و الأسمبلي جنبا إلى جنب، و فى احد مشاريعي قمت ببناء نظام plugin كامل بالـ ++C و جزء منه Managed لدعم لغات الدوت نت - و ايضا الـ Java عن طريق JNI.

و الله ولي التوفيق

1

مدونتي: C++ Tips and Tricks

#16
اقتباس

أضحك الله سنك، مضاد الفيروسات لن يستخدم مثل هذه الفئات و لكنه سيقوم بعمل intercept للملف التنفيذي قبل تنفيذه و مثل هذه الأمور تكون على مستوي الكرنل و ليس user.

ههههههههههههههه

اعذرنى اخوك جديد فى المجال (ايوة خلينى انا فى user دى وبلاش kernel)

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

واقتنعت بها لانى ارى مضاد الفيروسات يعمل مثلا عند نسخ مجلدات او ملفات من مكان لاخر حتى داخل نفس الجهاز

ويعمل ايضا عند توصيل اى flash او memory تلقائيا مع انها ليست executable

انا عارف ان تفكيرى سطحى طبعا لكنى مجرد مستخدم لم اتعمق :lol:

اقتباس

أغلب الوقت انا استخدم ++C و لكن هذا لا يمنع اني استخدم #C و Emit و الأسمبلي جنبا إلى جنب، و فى احد مشاريعي قمت ببناء نظام plugin كامل بالـ ++C و جزء منه Managed لدعم لغات الدوت نت - و ايضا الـ Java عن طريق JNI.

لاحظت ذلك واتمنى ان اكتسب نصف هذه الخبرات

مشكور على سعة صدرك :)


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#17

السلام عليكم

إخواني شكراً لكم على هذه المناقشة الجميلة

التي عرضتم فيها الكثير من الأشياء التي لاأعرفها

منذ أربع أشهر كنت أعمل على صناعة هذا الأنتي فايروس

مع أني لست بلخبرة الكافية لصناعة مثل هذه تطبيقات

ولكن بعد عمل كثيف ومجهد إستطعت صناعة مكافح قوي

لابأس به كمزايا وقوى ولكن بعد الذي تعلمته أردت إكتساب المزيد من القوى آلا وهي قوى الـ C++ ,C,Assemply

لأني لم أرى أي مكافح فيروسات شهير أو قوي بالدوت نت

على العموم شكراً لكم إخواني

لكن أرجوا منكم إيضاح لي

ماالمقصود بـ

اقتباس

فى برنامج مضاد الفيروسات ستحتاج لبناء driver حينها إستخدم c++/c، و ستحتاج لبناء UI إستخدم C#/QT، كل الأدوات ستؤدى لما تريد و لكن السؤال أيهم سيؤديها أفضل؟ هذا ما تحتاج للتفكير به كي لا تضيع وقتك فى تعلم شئ لن تحتاجه الأن.

وشكراً لكم

Be the change you want to see in the world


#18

هذه صور للبرنامجي

ZEROAV.zip

Be the change you want to see in the world


مواضيع مشابهة