Wmain vs Main C وقت التشغيل
سؤال
لقد قرأت بعض المقالات حول بنات Windows C المختلفة ، و Wmain و WinMain.
لذلك ، إذا كنت على صواب ، يتم إضافة هذه إلى مجمعات لغة C لنظام التشغيل Windows OS. ولكن ، كيف يتم تنفيذها؟
على سبيل المثال ، يحصل WMAIN على Unicode كـ Argv [] ، ولكن نظام التشغيل الذي يرسل هذه الوسائط إلى البرنامج ، فهل هناك أي مجال خاص في إدخال ملف .exe الذي يقول لنظام التشغيل Windows لتمرير Arguemnts كحوض يونيكود؟ شكرًا.
المحلول
الإصدارات الحديثة من Windows تستخدم داخليًا UTF-16. لذلك ، عندما تقوم بتشغيل عملية تنفيذ قابلة للتنفيذ ، يتم تمرير جميع وسيطات سطر الأوامر على الأرجح كـ UTF-16 من البداية ، ومكتبة وقت التشغيل المرتبطة بالتطبيق الذي تم إطلاقه إما يمرر الوسيطات من خلال سالمين (إذا كنت تستخدم wmain
) أو يحولها إلى الترميز المحلي تلقائيًا (إذا كنت تستخدم main
). (على وجه التحديد سيتم ذلك بواسطة wmainCRTStartup
/mainCRTStartup
وهي نقاط الدخول الفعلية المستخدمة لتطبيقات Windows Console.)
نصائح أخرى
أولاً: التشدق المتحار: من المؤكد أن WMAIN لا تحصل على حجج أحادية. يتم تعريف Unicode بشكل مستقل من أي تشفير معين. يحصل WMAIN على حجج في تشفير حرف 16 بت من Unicode ، UTF-16 بتخمين. لقد راجعت للتو وثائق Microsoft على Wmain والروابط منه ومن الواضح أن Microsoft ليس لديها أدنى فكرة حول ماهية Unicode عندما كتبوها.
على أي حال ، يتم تعريف نقطة دخول البرنامج بواسطة الرابط. يحتوي برنامج AC دائمًا على قدر معين من رمز Prologue الذي يتم تشغيله قبل Main/Wmain/WinMain/Wwinmain. إذا تم استخدام أحد الإصدارات الواسعة من Main ، فإن رمز Prologue يحول الأحرف في البيئة من أي مجموعة من الأحرف التي تكون موجودة إلى إصدار الحرف الواسع.