تحويل Win16 التعليمات البرمجية C Win32
سؤال
بشكل عام ، ما ينبغي عمله لتحويل 16 بت ويندوز برنامج Win32 ؟ أنا متأكد من أنني لست الشخص الوحيد الذي يرث تعليمات البرمجة الأساسية و يكون فاجأ العثور على 16 بت رمز الكامنة في زوايا.
الرمز في السؤال هو C.
المحلول
- معاني
wParam
وlParam
تغيرت في كثير من الأماكن.أنا بقوة نشجعك على أن تكون بجنون العظمة و تحويل أكبر قدر ممكن استخدام رسالة المفرقعات.أنها سوف توفر لك الكثير من الصداع.إذا كان هناك قطعة واحدة فقط من نصيحة أستطيع أن أعطي لكم ، وهذا من شأنه أن يكون عليه. - طالما كنت تستخدم رسالة المفرقعات ، أيضا تمكين
STRICT
.أنها سوف تساعدك على التقاط Win16 رمز قاعدة باستخدامint
حيث يجب أن يكون باستخدامHWND
,HANDLE
, أو أي شيء آخر.تحويل هذه سوف تساعد إلى حد كبير مع #9 في هذه القائمة. hPrevInstance
لا طائل منه.تأكد من أنها لا تستخدم.- تأكد من أنك تستخدم Unicode-ودية المكالمات.هذا لا يعني أنك تحتاج إلى تحويل كل شيء إلى
TCHAR
s, ولكنه يعني أنك أفضل محلOpenFile
,_lopen
, ،_lcreat
معCreateFile
, إلى اسم واضح LibMain
الآنDllMain
, و مكتبة كاملة تنسيق التصدير اتفاقيات مختلفة- Win16 لا VMM.
GlobalAlloc
,LocalAlloc
,GlobalFree
, ،LocalFree
يجب أن يتم استبدال أكثر حداثة حكمه.عندما يتم تنظيف المكالماتLocalLock
,LocalUnlock
والأصدقاء ؛ إنهم الآن عديمة الفائدة.لا أستطيع أن أتصور التطبيق الخاص بك القيام بذلك ، ولكن تأكد من أنك لا تعتمد علىWM_COMPACTING
بينما كنت هناك. - Win16 أيضا أي حماية الذاكرة.تأكد من أنك لا تستخدم
SendMessage
أوPostMessage
إرسال مؤشرات إلى خارج العملية ويندوز.سوف تحتاج إلى التبديل إلى طريقة أكثر حداثة IPC آلية ، مثل أنابيب أو ملفات الذاكرة المعنونة. - Win16 أيضا تفتقر إلى استباقية تعدد المهام.إذا أردت إجابة سريعة من نافذة أخرى ، كانت باردة تماما للاتصال
SendMessage
وانتظر رسالة إلى معالجتها.التي قد تكون فكرة سيئة الآن.النظر في ما إذا كانPostMessage
ليس الخيار الأفضل. - مؤشر صحيح أحجام تغيير.تذكر للتحقق بعناية في أي مكان كنت قراءة أو كتابة البيانات إلى القرص—خاصة إذا كانوا Win16 الهياكل.سوف تحتاج إلى يدويا إعادة لهم التعامل مع أقصر القيم.مرة أخرى, على الأقل إيلاما طريقة للتعامل مع هذا سيتم استخدام رسالة المفرقعات حيثما كان ذلك ممكنا.وإلا, سوف تحتاج إلى يدويا مطاردة وتحويل
int
إلىDWORD
وهكذا حيثما ينطبق ذلك. - وأخيرا عندما نلت واضح ، النظر في تمكين 64 بت تجميع الشيكات.الكثير من القضايا التي تواجهها مع من 16 إلى 32 بت هي نفس الذهاب من 32 إلى 64 و Visual C++ هو فعلا ذكي جدا في هذه الأيام.ليس فقط سوف يمكنك التقاط بعض القضايا العالقة;عليك الحصول على نفسك على استعداد الخاص بك في نهاية المطاف Win64 الهجرة أيضا.
تحرير:كما @ChrisN ، الدليل الرسمي على ترقية Win16 تطبيقات Win32 لا تزال متاحة ، سواء fleshes و يضيف إلى النقاط المذكورة أعلاه.
نصائح أخرى
وبصرف النظر عن الحصول على بناء بيئة مناسبة ، وفيما يلي بعض التفاصيل سوف تحتاج إلى معالجة:
البنيات التي تحتوي على رجات سوف تحتاج إلى تغيير باختصار أو توسع من 16 إلى 32 بت.إذا قمت بتغيير حجم الهيكل وهذا هو تحميل/حفظ إلى القرص سوف تحتاج إلى كتابة بيانات الملف ترقية المدونة.
في نافذة البيانات غالبا ما يتم تخزين مع مقبض النافذة باستخدام GWL_USERDATA.إذا وسعت بعض البيانات إلى 32 بت ، إزاحة سوف تتغير.
نقطة & حجم هياكل 64 بت في Win32.في Win16 كانت 32 بت يمكن أن تعاد كما DWORD (المتصل تقسيم قيمة الإرجاع إلى قسمين 16 بت القيم).هذا لم يعد يعمل في Win32 (أيWin32 لا عودة 64 بت النتائج) و وظائف تم تغيير لقبول مؤشرات لتخزين قيم الإرجاع.وسوف تحتاج إلى تحرير كل من هذه.واجهات برمجة التطبيقات مثل GetTextExtent تتأثر بهذا.هذا نفس الموضوع ينطبق أيضا على بعض رسائل Windows.
استخدام ملفات 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.