BUG: تمت مصادفة عند تجاوز معلومات نوع 64 كيلو CK4009 أو CK1020

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

اضغط هنا لرابط المقالة باللغة الانجليزية112335
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الأعراض
قد يؤدي إنشاء إصدار تصحيح التطبيق الذي يحتوي على أكثر من 64 كيلو معلومات فهرس أنواع واحد أو أكثر من رسائل الخطأ التالية بالاعتماد على ما هو إصدار CVPACK قيد الاستخدام:
خطأ فادح CVPACK: CK1020: النوع الذي تم حزمه فهرس يتجاوز 65535 في الوحدة النمطية <filename.obj>
تحذير CVPACK: CK4009: تجاوز أنواع 64 كيلو... تجاهل أنواع اللاحقة.
cvpack.exe "خطأ داخلي" رمز الاستثناء - 0xc0000005.
السبب
تكون هذه الأخطاء بسبب جزئي الحقيقة فهرس معلومات نوع رمزي CodeView ذلك هو قيمة 16 بت الذي يجعل حدث تجاوز إذا تجاوز عدد أنواع رمز المحزوم 64 كيلو.

لاحظ أن CK4009 Visual C++ الإصدار 1.0 (32-بت) و الإصدار 1.5 يعتبر البديل (16-بت) في رسالة الخطأ CK1020 القديمة. فشل packer CK1020 ، وفي لا ليتم تصحيحه البرنامج. مع CK4009 ، packer لا تفشل العرض، لكنه يتجاهل كافة أنواع nonprimitive اللاحقة. سيسمح هذا الأقل البرنامج ليتم تصحيحه تلك الرموز غير تم تجاهل أنواع الخاصة به.
الحل
فيما يلي بعض الأشياء التي يمكن القيام لتقليل عدد الرموز في أحد تطبيقات بحيث أنه يمكن أن يكون بنجاح تصحيحه:
  1. تجميع ملفات المصدر التي تحتاج إلى تصحيح مع /Zi واستخدام /Zd تبقى فقط. هذا إلى تقليل عدد الرموز في التطبيق الخاص بك. (إذا كنت تستخدم الخاص للمبرمجين منضدة (PWB) أو منضدة Visual فإنه سيتم أيضاً تتطلب استخدام makefile خارجية لأنه لم يتم التحويل البرمجي الوحدة النمطية المحدد داخل هذه الأدوات.) إذا اخترت ترجمة مع /Zd سيتم الحصول على دعم رقم السطر فقط من أجل الوحدات النمطية. مع linker mapfile يمكنك تحديد موقع رموز العام بحيث يمكنك الأقل عرض البيانات العمومية الخاصة بك في CodeView إذا لزم الأمر. للحصول على مزيد من المعلومات، الرجاء مراجعة article(s) التالية في "قاعدة المعارف لـ Microsoft:
    48241العلاقة بين عناوين ملف خريطة الموقع في الذاكرة
  2. إذا كنت تستخدم MFC مع Visual C++ ، حاول إعادة إنشاء مكتبات MFC مع رمز التبديل /Zi بدلاً من /Z7. سيتم إنشاء هذا ملف .PDB (قاعدة بيانات "البرنامج") لمكتبة بأكملها التي سوف تحتوي على كافة المعلومات نوع رمزي. أثناء التحويل البرمجي في الملفات المصدر ، كل مرة يقوم المحول البرمجي بإنشاء معلومات نوع لرمز جديد فحصه الملف PDB لمعرفة ما إذا كان هذا النوع موجود بالفعل. إذا كان الأمر كذلك، لا يتم إضافة النوع. باستخدام هذه العملية, يتم تقليل المبلغ الإجمالي معلومات نوع بواسطة إزالة أنواع المكرر وإلا ستكون موجودة في ملفات .OBJ إنشاء فئة Foundation لـ Microsoft (MFC) باستخدام /Z7 المكتبات. يؤدي استخدام /Zi redundancies يتم تخفيض قبل التعليمة البرمجية packer ينفذ ، مما يساعد packer تعمل بشكل أكثر كفاءة.
  3. للمشاريع Visual C++ ترجمة استخدام /Fd لتحديد ملف .PDB واحد للتطبيق الخاص بك. مرة أخرى، هو فكرة هنا لتقليل عدد أنواع بواسطة إزالة redundancies موجودة في تطبيقات الوحدة النمطية تعدد قبل packer ينفذ. لاحظ أن هذا الإجراء التلقائي إذا أنك تقوم بإنشاء من "منضدة مرئية". سيتم تسمية الملف الافتراضي MSVC.PDB: باستخدام /Fd يسمح لك بتحديد اسم بديل. بما أن الافتراضي هو استخدام ملفات PDB (والذي يحل معلومات متكررة) ، تكون أقل بكثير من احتمالية حدوث المشكلة. لتمكين استخدام PDB استخدم /Zi لا /Z7 عند ترجمة عدم إيقاف تشغيل "برنامج قاعدة بيانات" في IDE (أو استخدام /PDB: NONE على سطر الأوامر).
  4. إذا كان الأمر ممكناً، يجب إزالة بعض أنواع أكثر تعقيداً مثل فئات و بنيات تتضمن التعدادات و واتحادات. ستقلل احتمال أنواع redundantly تضمين في التطبيق الخاص بك.
  5. ترجمة بعض الوحدات النمطية بدون أية معلومات تصحيح الأخطاء في كل. استخدام فئات Foundation Microsoft ، يجب أخذها العناية وليس على خلط الوحدات النمطية المترجمة مع _DEBUG و الوحدات النمطية المترجمة دون _DEBUG. حاول إنشاء مكتبة MFC مع CODEVIEW = 0 أو CODEVIEW = 2 لتقليل مقدار المعلومات الرمزية (الافتراضي التصحيح "= 1" ، والذي يقوم بتعريف _DEBUG). عند إنشاء مكتبة الفئة مع CODEVIEW = 0, وليس لديك مكتبة أية معلومات متوفرة التصحيح. MFC التصحيح دالات TRACE و ASSERT ستبقى متوفرة, ومع. مع CODEVIEW = 2 ، سوف يتم إنشاء بعض المكونات من المكتبة مع معلومات التصحيح. README.TXT فييشرح \MFC\SRC أكثر ما هو كل من نفّذ الخيارات من تحديد معلومات التصحيح المتوفر لمكتبة MFC. العثور على معلومات إضافية يمكن أيضاً أن تكون في الملحق "دليل مستخدم مكتبات فئة" كما يلي:
    الملحق B لـ Visual C++ الإصدار 1.0 (16-بت)
    الملحق أ لـ Visual C++ الإصدار 1.5 (16-بت)
    الملحق B لـ Visual C++ الإصدار 1.1 (32-بت)
  6. يتعلق رؤوس precompiled أخرى غير المؤكدة المحتملة حل واحد. يمكنك محاولة تمكين أو تعطيل استخدام رؤوس precompiled, أيهما يتم استخدامه حالياً لا ومن ثم إعادة إنشاء كل شيء. قد تأثيرات مختلفة استناداً إلى التطبيق الخاص بك استخدام ملفات رأس.
تصريح
أقرت Microsoft أن يكون مشكلة في الأداة المساعدة CVPACK لـ MS-DOS الإصدارات 4.0 و 4.1 4.26 ، و CVPACK المساعدة لـ Windows NT أو إصدار 4.25 هذا. نحن يتم researching هذه المشكلة ثم سيتم نشر جديد المعلومات هنا في "قاعدة المعارف لـ Microsoft كما أن تصبح متوفرة.
معلومات أخرى
"رمز" و "نوع OMF مواصفات يتطلب أن تكون معلومات التصحيح رمزي موجودة في جدولين صدور بواسطة برنامج التحويل البرمجي (في هذه مضمنة في الوحدات النمطية الكائن والملف .PDB Visual C++). تسمى رموز $ $ الجدول الأول كما توضح الرموز في ملف الكائن; بينما الثاني تسمى أنواع $ $ وتحتوي على معلومات حول أنواع رمز. على سبيل المثال، تعرف العبارة "Int"تعريف رمز "i" من نوع"عدد صحيح"; "i". توجد حقول في السجلات من كلا الجدولين يتم استخدام الفهرس في سجلات الجدول الآخر. علاوة على ذلك، يوجد جدول ثالث من رمزي المعلومات التي يتم إنشاؤها من قبل linker وكتابتها إلى الملف القابل للتنفيذ. هذا الجدول يسمى PUBLICS ويحتوي على سجلات رمز كل رمز عام أثناء معالجة ملفات الكائن.

الغرض الخاص CVPACK هو إزالة رمز مكررة ومعلومات نوع إعادة كتابة المعلومات المتبقية في تنسيق الأمثل من أجل معالجة CodeView. يجب ألا يتجاوز الفهارس نوع هذا معلومات المتبقي 64 كيلو لأن الفهرس نفسه قيمة 16-بت. لأن هذا الفهرس على جزء من المواصفات لا يمكن تغيير بدون قطع الأدوات التي تعتمد عليها ، العديد من الذي المزودة من قبل بائعين لجهة خارجية.
4.00 4.01 4.10 4.25 4.26 4.27

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 112335 - آخر مراجعة: 01/10/2015 10:55:51 - المراجعة: 2.0

Microsoft CVPACK for MS-DOS 4.0, Microsoft CVPACK for MS-DOS 4.10, Microsoft CVPACK for MS-DOS 4.26, Microsoft CVPACK Utility for Windows NT 4.25, Microsoft CVPACK Utility for Windows NT 4.27

  • kbnosurvey kbarchive kbmt KB112335 KbMtar
تعليقات