أنه لا يزال من المنطقي أن تعلم انخفاض مستوى WinAPI البرمجة ؟ [مغلقة]

StackOverflow https://stackoverflow.com/questions/5507

  •  08-06-2019
  •  | 
  •  

سؤال

هل يعقل بعد كل من C#-تمكنت-النعيم العودة إلى بيتزولد برمجة النوافذ في محاولة لإنتاج رمز w/ نقية WinAPI?

ماذا يمكن أن نتعلم من ذلك ؟ ليس هو فقط عفا عليها الزمن أيضا أن تكون مفيدة ؟

هل كانت مفيدة؟

المحلول

هذا السؤال هو المطلة على ديني :) ولكن سأعطيك أفكاري على أي حال.

أنا لا أرى قيمة في learing Win32 API.معظم إن لم يكن كل مكتبات واجهة المستخدم الرسومية (المدارة أو غير المدارة) يؤدي استدعاءات Win32 API.حتى الأكثر شمولا المكتبات لا تغطي 100% من API ، وبالتالي هناك دائما الثغرات التي تحتاج إلى توصيله مباشرة مكالمات API أو P/الاحتجاج.بعض من أسماء مغلفة حول استدعاءات API لها أسماء مشابهة الأساسية مكالمات API ، ولكن تلك الأسماء ليست بالضبط الذاتي توثيق.لذا فهم API الأساسي ، والمصطلحات المستخدمة فيه ، سوف تساعد في فهم المجمع واجهات برمجة التطبيقات وماذا يفعلون في الواقع.

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

هتاف!

نصائح أخرى

ظللت القياسية C/C++ سنوات قبل التعلم Win32 API ، وأن تكون حادة جدا ، "التعلم Win32 API" جزء لا أفضل تجربة في حياتي.

في يد واحدة Win32 API هو بارد جدا.انها مثل امتداد C القياسية API (الذي يحتاج fopen عندما يمكن أن يكون لديك CreateFile.ولكن أعتقد يونكس/لينكس/WhateverOS نفس الأداة وظائف.على أي حال, في يونكس/لينكس ، لديهم "كل شيء هو ملف".في ويندوز ، لديهم "كل ما هو...نافذة" (لا تمزح!انظر CreateWindow!).

في ناحية أخرى ، هذا هو إرث API.كنت سوف يكون التعامل مع الخام C, الخام ج الجنون.

  • مثل قول أحد هيكل الخاصة الحجم إلى تمرير من خلال void * مؤشر إلى بعض Win32 وظيفة.
  • الرسائل يمكن أن يكون مربكا جدا جدا:خلط C++ الكائنات مع Win32 ويندوز يؤدي إلى مثيرة جدا للاهتمام أمثلة الدجاج أو البيض المشكلة (لحظات مضحكة عندما تكتب نوع من delete this ; في أسلوب فئة).
  • الحاجة إلى فرعية WinProc عندما كنت أكثر دراية كائن الميراث الرأس تقسيم أقل من المستوى الأمثل.
  • و بالطبع هناك فرح "لماذا في هذا التكسير العالم فعلوا هذا الشيء بهذه الطريقة ??"لحظات عندما كنت في الإضراب لوحة المفاتيح الخاصة بك مع رأسك مرة واحدة كثيرة جدا والحصول على العودة الى الوطن مع مفاتيح محفورة في جبينك, فقط لأن أحدهم يعتقد أنه أكثر منطقية لكتابة API لتمكين تغيير اللون من "نافذة" ، وليس عن طريق تغيير خصائصه ، ولكن بسؤال إلى الإطار الأصل.
  • الخ.

في الأخير اليد (ثلاثة أيدي ???) ، نرى أن بعض الناس يعملون مع إرث واجهات برمجة التطبيقات هي نفسها باستخدام رمز تراث التصميم.لحظة تسمع "const هو للدمى"أو "أنا لا استخدام مساحات لأنها تقلل من وقت التشغيل السرعة"،أو حتى أفضل "يا من يحتاج C++?أنا رمز في بلدي العلامة التجارية الخاصة بها من وجوه المنحى ج!!!"(لا تمزح...في بيئة مهنية ، وكانت النتيجة عن الأنظار تماما...), سوف تشعر نوع من الرهبة إلا أدان يشعر أمام المقصلة.

لذا...جميع في كل شيء ، مثيرة للاهتمام تجربة.

تحرير

بعد إعادة قراءة هذا المنصب ، أرى أنه يمكن اعتبارها مفرطة في السلبية.الأمر ليس كذلك.

أنها مثيرة للاهتمام في بعض الأحيان (وكذلك محبطة) لمعرفة كيفية عمل الأشياء تحت غطاء محرك السيارة.عليك أن نفهم أنه على الرغم من الهائلة (المستحيل؟) القيود Win32 API فريق العمل الرائع للتأكد من كل شيء, من أنت "العجوز Win16 البرنامج" إلى "آخر Win64 الإفراط في أعلى التطبيق" ، يمكن أن تعمل معا في الماضي, الآن و في المستقبل.

السؤال هو:هل تريد حقا ؟

لأن الإنفاق أسابيع أن تفعل الأشياء التي يمكن القيام به (كما فعلت أفضل) في أكثر رفيعة المستوى و/أو وجوه المنحى API يمكن تكون دي تحفيزية (تجربة الحياة الحقيقية:3 أسابيع من أجل الفوز API ضد 4 ساعات في ثلاث لغات أخرى و/أو المكتبات).

على أي حال, سوف تجد ريمون تشن بلوق مثيرة جدا للاهتمام لأن من الداخل عرض على كل من Win API وتطورها خلال السنوات الماضية:

https://blogs.msdn.microsoft.com/oldnewthing/

الاطلاق.عندما لا أحد يعرف مستوى منخفض ، الذين سيتم تحديث وكتابة عالية المستوى اللغات ؟ أيضا ، عندما تفهم انخفاض مستوى الأشياء ، يمكنك كتابة رمز أكثر كفاءة في مستوى أعلى اللغة و أيضا تصحيح أكثر كفاءة.

الأم واجهات برمجة التطبيقات هي "حقيقية" نظام التشغيل واجهات برمجة التطبيقات.على .صافي مكتبة (مع استثناءات قليلة) لا شيء أكثر من مجمع يتوهم من حولهم.لذا نعم, أود أن أقول أن أي شخص يمكن أن نفهم .صافي مع كل تعقيداته ، يمكن أن نفهم نسبيا الأمور الدنيوية مثل التحدث مع API دون الاستفادة من رجل في منتصف.

مجرد محاولة للقيام حقن DLL من التعليمات البرمجية المدارة.فإنه لا يمكن القيام به.سوف تضطر إلى كتابة التعليمات البرمجية الأصلية على هذا على النوافذ القرص ، لريال مدريد subclassing و أشياء أخرى كثيرة.

لذلك نعم:يجب أن (أن) تعرف على حد سواء.

تحرير:حتى إذا كنت تخطط لاستخدام P/الاحتجاج.

على افتراض أن كنت بناء تطبيقات تستهدف ويندوز:

  • يمكن أن يكون بالتأكيد مفيدة لفهم مستويات أقل من النظام - كيف تعمل وكيف رمز يتفاعل معهم (ولو بشكل غير مباشر) ، حيث لديك المزيد من الخيارات التي لا تتوفر في مستوى أعلى من التجريد
  • هناك أوقات عندما التعليمات البرمجية الخاصة بك قد لا تكون فعالة عالية الأداء أو دقيقة بما يكفي لتلبية الاحتياجات الخاصة بك
  • ولكن في أكثر الحالات ، الناس مثلنا (الذي لم يتعلم "غير المدارة الترميز") سوف تكون قادرة على سحب قبالة البرمجة نحاول القيام به دون "التعلم" Win32.
  • كذلك هناك الكثير من المواقع التي توفر العامل عينات من أجزاء التعليمات البرمجية وحتى وظيفية بالكامل التعليمات البرمجية المصدر التي يمكن أن "النفوذ" (استعارة تسرق - ولكن تأكد أنك تمتثل أي إعادة استخدام ترخيص أو حق المؤلف!) لسد أي ثغرات أن لا يتم التعامل معها من قبل .NET framework فئة المكتبات (أو المكتبات التي يمكنك تحميل أو الترخيص).
  • إذا كان يمكنك سحب قبالة مآثر عليك دون العبث في Win32 و أنت تقوم بعمل جيد النامية بشكل جيد للقراءة التعليمات البرمجية المدارة ، ثم أقول اتقان .صافي سيكون خيارا أفضل من نشر نفسك رقيقة على اثنين من بيئات مختلفة.
  • إذا كنت في كثير من الأحيان بحاجة إلى الاستفادة من هذه الميزات من النوافذ التي لم تلقى جيدة مكتبة الفئات إطار عمل التغطية عن طريق تعلم المهارات التي تحتاجها.
  • أنا شخصيا قضيت الكثير من الوقت في القلق حول "مجالات أخرى" من الترميز أنا من المفترض فهم لإنتاج "برامج جيدة" لكن هناك الكثير من منحرفون هناك أن أعتقد الجميع احتياجات ورغبات مثل الخاصة بهم.البؤس يحب الشركة.:)

على افتراض أن كنت بناء تطبيقات "ويب 2.0" العالمية ، أو أن تكون فقط مفيدة/مفيدة *NIX & ماك المستخدمين:

  • العصا مع لغات المجمعين التي تستهدف العديد من عبر منصة البيئات ممكن.
  • نقية .صافي في Visual Studio أفضل من Win32 واضح لكن النامية ضد أحادية المكتبات ربما باستخدام حادة تطوير IDE هو على الارجح أفضل نهج.
  • يمكنك أيضا قضاء بعض الوقت في تعلم جافا و تلك المهارات قد نقل بشكل جيد جدا إلى C# البرمجة (بالإضافة إلى كود جافا نظريا تشغيلها على أي منصة مع مطابقة JRE).لقد سمعت أنه قال أن جافا هو أكثر مثل "الكتابة مرة واحدة ، التصحيح في كل مكان" ، ولكن هذا ربما صحيح كما (أو حتى أكثر من) C#.

القياس:إذا كنت بناء السيارات من أجل لقمة العيش (البرمجة) ، ثم الهامة جدا أن تعرف كيف يعمل محرك (Win32).

الجواب بسيط, نعم.

هذا هو الجواب على أي سؤال مثل.... "هل يعقل أن تعلم تدني مستوى اللغة/api X حتى عند أعلى مستوى في اللغة/api Y هل هناك"

نعم

كنت قادرا على الحذاء حتى جهاز الكمبيوتر الخاص بك ويندوز (أو أي نظام تشغيل آخر) و نسأل هذا السؤال في ذلك لأن بعض الرجال في كتب مايكروسوفت 16-بت رمز التجميع الذي يقوم بتحميل نظام التشغيل الخاص بك.

المتصفح يعمل لأن أحدهم كتب نظام التشغيل kernel في C التي تخدم جميع المتصفح الطلبات.

فإنه يذهب كل وسيلة تصل إلى لغات البرمجة.

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

لا api/اللغة في أي مستوى من التجريد هو أفضل ما لم يكن هناك أحد أفضل المتنافسة في نفس المستوى.

طريقة أخرى للنظر في ذلك:وخير مثال واحد من مايكل الأبرش كتاب:مبرمج C أعطيت مهمة كتابة دالة مسح الشاشة.منذ ج كان أفضل (أعلى مستوى) التجريد على الجمعية و كل مبرمج يعرف فقط C و أعرف ذلك جيدا.قال: - انتقل المؤشر إلى كل مكان على الشاشة و مسح الحرف هناك.هو الأمثل حلقة و تأكدت أنه ركض بأسرع ما يمكن.ولكن كان لا يزال بطيئا...حتى اتى رجل و قال ان هناك بعض BIOS/VGA تعليمات أو شيء التي يمكن مسح الشاشة على الفور.

فإنه يساعد دائما أن تعرف ما كنت المشي على.

نعم, لعدة أسباب:

1) .صافي يلتف Win32 رمز..صافي عادة ما تكون متفوقة نظام التعليمات البرمجية ضد, ولكن وجود بعض المعارف الأساسية Win32 طبقة (عفوا ، WinAPI الآن أن هناك رمز 64 بت أيضا) يعزز الخاص بك معرفة ما يحدث حقا.

2) في هذا الاقتصاد ، فمن الأفضل أن يكون بعض المزايا أكثر من غيرها من الرجل عندما كنت تبحث عن وظيفة.بعض WinAPI تجربة قد توفر هذا بالنسبة لك.

3) بعض جوانب نظام غير متوفرة من خلال .net framework بعد, و إذا كنت ترغب في الوصول إلى هذه الميزات سوف تحتاج إلى استخدام p/استدعاء (انظر http://www.pinvoke.net لبعض المساعدة هنا).وجود على الأقل القليل من WinAPI تجربة سوف تجعلك p/استدعاء التنمية الجهد الكثير أكثر كفاءة.

4) (إضافة) الآن أن Win8 قد تم في جميع أنحاء لبعض الوقت ، فمن لا يزال بنيت على أعلى من WinAPI.دائرة الرقابة الداخلية, الروبوت, OS X, Linux و كلها هناك ، ولكن WinAPI سوف يكون لا يزال هناك لسنوات عديدة.

تعلم لغة برمجة جديدة أو تكنولوجيا لواحد من ثلاثة أسباب:
1.تحتاج إلى:كنت بدأت مشروعا لبناء تطبيق ويب و أنت لا تعرف أي شيء عن ASP.NET
2.الحماس:كنت جدا متحمس ASP.NET MVC.لماذا لا نحاول ؟
3.وقت الفراغ:ولكن هذا على أي حال.

أفضل سبب لتعلم شيء جديد هو ضرورة.إذا كنت بحاجة إلى القيام بشيء ما .صافي الإطار لا يمكن القيام به (مثل الأداء على سبيل المثال) ثم WinAPI هو الحل الخاص بك.حتى ذلك الحين نحن نضع أنفسنا مشغول مع التعلم .صافي

معظم الاحتياجات على سطح المكتب لن تحتاج إلى معرفة Win32, ولكن هناك الكثير من Win32 ليس في .صافي ، ولكن هو في outlaying الاشياء التي قد تكون أقل من 1 ٪ من التطبيق الخاص بك.

دعم USB HID الدعم, Windows Media Foundation قبالة الجزء العلوي من رأسي.هناك العديد من بارد Vista API المتاحة فقط من Win32.

سوف تفعل نفسك كبير صالح من خلال تعلم كيفية القيام إمكانية التشغيل المتداخل مع Win32 API, إذا كنت تفعل سطح المكتب برمجة, لأنه عندما كنت بحاجة إلى استدعاء Win32 و سوف لن تنفق أسابيع الخدش رأسك.

أنا شخصيا لا أحب Win32 API ولكن هناك قيمة في التعلم كما API تسمح بمزيد من التحكم والكفاءة باستخدام واجهة المستخدم الرسومية من لغة مثل Visual Basic, وأعتقد أنه إذا كنت تريد الذهاب لجعل المعيشة برنامج الكتابة يجب أن نعرف API حتى لو كنت لا تستخدم ذلك مباشرة.هذا هو لأسباب مشابهة الأسباب فإنه من الجيد أن تعلم C, مثل كيف strcpy يأخذ المزيد من الوقت من النسخ وهو صحيح ، أو لماذا يجب عليك استخدام مؤشرات إلى صفائف المعلمات وظيفة بدلا من صفائف من حيث القيمة.

تعلم C أو أقل مستوى اللغة يمكن أن تكون بالتأكيد مفيدة.ومع ذلك لا أرى أي ميزة واضحة في استخدام غير المدارة WinAPI.

رأيت انخفاض مستوى Windows API البرمجية...ليس جميلا...أتمنى أن أتعلمه منه.أعتقد أنه من فوائد تعلم منخفضة المستوى مثل C, كما يمكنك الحصول على فهم أفضل من الأجهزة العمارة و كيف أن كل الأشياء تعمل.التعلم القديمة Windows API...أعتقد أن الأمور يمكن أن يترك الناس في Microsoft الذين قد يحتاجون إلى معرفة ذلك لبناء أعلى مستوى اللغات API...بنوه ، والسماح لهم يعانون من ذلك؛ -)

ومع ذلك ، إذا كنت يحدث في العثور على حالة حيث كنت تشعر انك لا تستطيع أن تفعل ما عليك القيام به في مستوى أعلى اللغة (قليلة جدا) ، ثم ربما تبدأ خطورة الغوص في هذا العالم.

نعم.نلقي نظرة على uTorrent, مدهش قطعة من البرمجيات الكفاءة.نصف من انها صغيرة الحجم ويرجع ذلك إلى حقيقة أن الكثير من المكونات الأساسية إعادة كتابة استخدام gargatuian المكتبات.

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

من المهم أن تعرف ما هو متاح مع Windows API.أنا لا أعتقد أنك بحاجة إلى كرنك رمز مع ذلك ، ولكن يجب أن نعرف كيف يعمل.على .NET Framework يحتوي على الكثير من الوظائف ولكن لا توفر التعليمات البرمجية المدارة في حكمه على كامل Windows API.في بعض الأحيان يمكنك الحصول على أقرب قليلا إلى المعدن ، و معرفة ما هو هناك و كيف يتصرف سوف تعطيك فهم أفضل لكيفية استخدامه.

هذا هو حقا نفس السؤال, يجب أن تعلم انخفاض مستوى لغة مثل C (أو حتى المجمع).

الترميز في ذلك هو بالتأكيد أبطأ (على الرغم من وبطبيعة الحال والنتيجة هي أسرع بكثير) ، ولكن الاستفادة الحقيقية هي تكسب أنت حسنات نظرة ثاقبة في ما يحدث على مقربة من مستوى النظام وليس من مجرد فهم شخص آخر كناية عن ما يجري.

فإنه يمكن أيضا أن تكون أفضل عندما تكون الأمور لا تعمل بشكل جيد أو سريع بما فيه الكفاية أو مع نوع من التفاصيل التي تحتاج إليها.(و لا على الأقل بعض subclassing و superclassing.)

أنا وضعت على هذا الطريق.أنا لا أحب برمجة Win32 API.يمكن أن يكون الألم مقارنة مع التعليمات البرمجية المدارة.ولكن أنا سعيد لأنني أعرف ذلك لأنني يمكن كتابة برامج وإلا لن تكون قادرة على.أستطيع أن أكتب البرامج التي لا يمكن للآخرين.بالإضافة إلى أنه يمنحك المزيد من التبصر في ما التعليمات البرمجية المدارة تقوم به خلف الكواليس.

مقدار القيمة التي تحصل عليها من التعلم Win32 API (وبصرف النظر عن أنواع الأفكار العامة التي تحصل عليها من التعلم حول كيفية الصواميل والمسامير من آلة تناسب معا) يعتمد على ما كنت تحاول تحقيق.الكثير من Win32 API كانت ملفوفة بشكل جيد في .صافي مكتبة دروس, ولكن ليس كله.على سبيل المثال إذا كنت تبحث عن بعض خطيرة البرمجة الصوتية, هذا جزء من Win32 API سيكون ممتازا موضوع الدراسة فقط لأن أبسط العمليات المتاحة .صافي الطبقات.آخر مرة تحققت حتى تمكنت دايركت دايركت المكتبة كان مروعا.


في خطر وقح الترويج الذاتي....

لقد عدت للتو عبر الحالة التي يكون فيها Win32 API كان خياري الوحيد.أريد أن يكون مختلف تلميحات على كل عنصر في عنصر تحكم listbox.كتبت كيف فعلت ذلك على هذا السؤال.

حتى في مستوى عال جدا اللغات التي لا تزال تستخدم API.لماذا ؟ حسنا ليس كل جانب من جوانب API تم تكرارها من قبل مختلف المكتبات الأطر ، إلخ.كنت بحاجة لمعرفة API طالما سوف تحتاج API لإنجاز ما كنت تحاول القيام به.(و لم يعد.)

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

هناك قدرا كبيرا من الوقت والجهد اللازمين لتعلم لتنفيذ native API المكالمات بشكل صحيح و العودة القيمة فقط لا يستحق كل هذا العناء.وأود أن بدلا من قضاء الوقت في تعلم بعض ساخنة جديدة أو تكنولوجيا أو الإطار من شأنها أن تجعل حياتك أسهل و البرمجة أقل إيلاما.لا عقود قديمة عفا عليها الزمن COM المكتبات التي لا أحد يستخدم بعد الآن (آسف COM المستخدمين).

من فضلك لا الحجر مني هذا الرأي.أنا أعرف الكثير من المهندسين هنا حقا غريبة النفوس و لا يوجد شيء خاطئ مع تعلم كيفية عمل الأشياء.حب الاستطلاع هو جيد حقا يساعد على الفهم.ولكن من النقطة الإدارية للنظر ، وأود أن بدلا من قضاء أسبوع تعلم كيفية تطوير تطبيقات الروبوت من كيفية المكالمات OLEs أو ضميريا.

إذا كنت تخطط لتطوير عبر منصة التطبيق إذا كنت تستخدم win32 ثم التطبيق الخاص بك يمكن بسهولة تشغيلها على لينكس عن طريق WINE.هذه النتائج في غاية تستعصي على التطبيق.هذا هو واحد من مزايا التعلم win32.

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