سؤال

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

الرمز في السؤال هو C.

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

المحلول

  1. معاني wParam و lParam تغيرت في كثير من الأماكن.أنا بقوة نشجعك على أن تكون بجنون العظمة و تحويل أكبر قدر ممكن استخدام رسالة المفرقعات.أنها سوف توفر لك الكثير من الصداع.إذا كان هناك قطعة واحدة فقط من نصيحة أستطيع أن أعطي لكم ، وهذا من شأنه أن يكون عليه.
  2. طالما كنت تستخدم رسالة المفرقعات ، أيضا تمكين STRICT.أنها سوف تساعدك على التقاط Win16 رمز قاعدة باستخدام int حيث يجب أن يكون باستخدام HWND, HANDLE, أو أي شيء آخر.تحويل هذه سوف تساعد إلى حد كبير مع #9 في هذه القائمة.
  3. hPrevInstance لا طائل منه.تأكد من أنها لا تستخدم.
  4. تأكد من أنك تستخدم Unicode-ودية المكالمات.هذا لا يعني أنك تحتاج إلى تحويل كل شيء إلى TCHARs, ولكنه يعني أنك أفضل محل OpenFile, _lopen, ، _lcreat مع CreateFile, إلى اسم واضح
  5. LibMain الآن DllMain, و مكتبة كاملة تنسيق التصدير اتفاقيات مختلفة
  6. Win16 لا VMM. GlobalAlloc, LocalAlloc, GlobalFree, ، LocalFree يجب أن يتم استبدال أكثر حداثة حكمه.عندما يتم تنظيف المكالمات LocalLock, LocalUnlock والأصدقاء ؛ إنهم الآن عديمة الفائدة.لا أستطيع أن أتصور التطبيق الخاص بك القيام بذلك ، ولكن تأكد من أنك لا تعتمد على WM_COMPACTING بينما كنت هناك.
  7. Win16 أيضا أي حماية الذاكرة.تأكد من أنك لا تستخدم SendMessage أو PostMessage إرسال مؤشرات إلى خارج العملية ويندوز.سوف تحتاج إلى التبديل إلى طريقة أكثر حداثة IPC آلية ، مثل أنابيب أو ملفات الذاكرة المعنونة.
  8. Win16 أيضا تفتقر إلى استباقية تعدد المهام.إذا أردت إجابة سريعة من نافذة أخرى ، كانت باردة تماما للاتصال SendMessage وانتظر رسالة إلى معالجتها.التي قد تكون فكرة سيئة الآن.النظر في ما إذا كان PostMessage ليس الخيار الأفضل.
  9. مؤشر صحيح أحجام تغيير.تذكر للتحقق بعناية في أي مكان كنت قراءة أو كتابة البيانات إلى القرص—خاصة إذا كانوا Win16 الهياكل.سوف تحتاج إلى يدويا إعادة لهم التعامل مع أقصر القيم.مرة أخرى, على الأقل إيلاما طريقة للتعامل مع هذا سيتم استخدام رسالة المفرقعات حيثما كان ذلك ممكنا.وإلا, سوف تحتاج إلى يدويا مطاردة وتحويل int إلى DWORD وهكذا حيثما ينطبق ذلك.
  10. وأخيرا عندما نلت واضح ، النظر في تمكين 64 بت تجميع الشيكات.الكثير من القضايا التي تواجهها مع من 16 إلى 32 بت هي نفس الذهاب من 32 إلى 64 و Visual C++ هو فعلا ذكي جدا في هذه الأيام.ليس فقط سوف يمكنك التقاط بعض القضايا العالقة;عليك الحصول على نفسك على استعداد الخاص بك في نهاية المطاف Win64 الهجرة أيضا.

تحرير:كما @ChrisN ، الدليل الرسمي على ترقية Win16 تطبيقات Win32 لا تزال متاحة ، سواء fleshes و يضيف إلى النقاط المذكورة أعلاه.

نصائح أخرى

وبصرف النظر عن الحصول على بناء بيئة مناسبة ، وفيما يلي بعض التفاصيل سوف تحتاج إلى معالجة:

  1. البنيات التي تحتوي على رجات سوف تحتاج إلى تغيير باختصار أو توسع من 16 إلى 32 بت.إذا قمت بتغيير حجم الهيكل وهذا هو تحميل/حفظ إلى القرص سوف تحتاج إلى كتابة بيانات الملف ترقية المدونة.

  2. في نافذة البيانات غالبا ما يتم تخزين مع مقبض النافذة باستخدام GWL_USERDATA.إذا وسعت بعض البيانات إلى 32 بت ، إزاحة سوف تتغير.

  3. نقطة & حجم هياكل 64 بت في Win32.في Win16 كانت 32 بت يمكن أن تعاد كما DWORD (المتصل تقسيم قيمة الإرجاع إلى قسمين 16 بت القيم).هذا لم يعد يعمل في Win32 (أيWin32 لا عودة 64 بت النتائج) و وظائف تم تغيير لقبول مؤشرات لتخزين قيم الإرجاع.وسوف تحتاج إلى تحرير كل من هذه.واجهات برمجة التطبيقات مثل GetTextExtent تتأثر بهذا.هذا نفس الموضوع ينطبق أيضا على بعض رسائل Windows.

  4. استخدام ملفات INI هو تثبيط في Win32 لصالح التسجيل.في حين INI وظائف لا يزال العمل سوف تحتاج إلى أن تكون حذرا مع ويندوز فيستا القضايا.16 بت البرامج في كثير من الأحيان تخزين INI في دليل نظام Windows.

هذه هي مجرد عدد قليل من القضايا أذكر.فقد كان أكثر من عقد من الزمان منذ أن فعلت أي Win32 ترقية.تحصل مرة واحدة في أنها سريعة جدا.كل codebase أن "يشعر" عندما يتعلق الأمر ترقية والتي سوف تعتاد على.ربما حتى تجد عدد قليل من البق على طول الطريق.

هناك دليل قاطع في هذه المادة ترقية التعليمات البرمجية 16-بت إلى 32-بت Windows على MSDN.

الأصلي sdk win32 كان أداة مسح شفرة المصدر و وضع علامة الخطوط التي تحتاج إلى تغيير ، ولكن لا أستطيع أن أتذكر اسم الأداة.

عندما فعلت هذا في الماضي, لقد استخدمت القوة الغاشمة تقنية - أي:1 - تحديث makefiles أو بناء بيئة استخدام 32 بت مترجم ورابط.اختياريا, فقط قم بإنشاء مشروع جديد في IDE (يمكنني استخدام Visual Studio) ، إضافة الملفات يدويا.

2 - بناء

3 - إصلاح الأخطاء

4 - كرر 2&3 حتى القيام به

آلام العملية يعتمد على التطبيق كنت المهاجرة.لقد تحولت 10,000 خط البرامج في ساعة ، 75,000 برامج الخط في أقل من أسبوع.لقد كان أيضا بعض المرافق الصغيرة التي توقفت على وأعاد (في الغالب) من الصفر.

أنا أتفق مع آلان أن التجربة والخطأ هو على الأرجح أفضل طريقة.

وهنا بعض جيدا نصائح.

على أن المترجم ربما يصاب معظم الأخطاء.أيضا, إذا كنت تستخدم "قريب" و "بعيد" مؤشرات يمكنك إزالة تلك التسميات -- مؤشر هو مؤشر في Win32.

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