سؤال

لقد فتحت قديم مساحة العمل التي libray و اختبار تسخير.كانت تعمل بشكل جيد ولكن الآن لا الإصدارات القديمة من المدونة لا تعمل مع نفس الأخطاء.لقد حاولت إعادة المشروع الذي يسبب نفس الأخطاء أيضا.لا شيء يبدو من النظام في إعدادات المشروع و الشفرة التي تم إنشاؤها يعمل في التطبيق الرئيسي.

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

LNK2001 خطأ linker أحصل على عادة يعني تركت خارج المكتبة أو نسيت لتنفيذ دالة ظاهري.ولكن هذا هو جزء من مكتبة قالب قياسي - وهو رأس في ذلك.

التعليمات البرمجية التي يتم سرد وجود مشكلة في IOCompletionPort.الكائنات لا تستخدم في الواقع std::string مباشرة, لكن لا نسمي هذا: Comms::Exception تقبل std::string وقيمة GetLastError أو WSAGetLastError.

وظيفة المذكورة في الخطأ (GetMessage) هو تنفيذها, ولكن هو دالة ظاهري لذا فئات أخرى يمكن تجاوز ذلك إذا دعت الحاجة.ومع ذلك يبدو أن المترجم قد جعلت مثل إصدار Ansi, ولكن أنا لا يمكن العثور على أي خيارات في الإعدادات التي من شأنها أن تحكم.وأظن أن ذلك قد يكون مشكلة ولكن لأن هناك القليل جدا في طريق خيارات المكتبة لدي أي وسيلة لمعرفة على وجه اليقين.ومع ذلك كل المشاريع لتحديد _MBCS في خيارات برنامج التحويل البرمجي.

--------------------التكوين:TestComms - Win32 التصحيح-------------------- ربط...األوامر.ليب(IOCompletionPort.الكائنات) :خطأ LNK2001:حل الرمز الخارجية "العامة:الطبقة الظاهرية الأمراض المنقولة جنسيا::basic_string الدرجة الأمراض المنقولة جنسيا::مخصص > __thiscall الإتصالات::استثناء::GetMessageA(الفراغ)const " (?GetMessageA@ استثناء@الإتصالات@@يوب?AV?$basic_string@DU ؟ $char_traits@د@std@@V?$مخصص@د@2@@std@@XZ) التصحيح/TestComms.exe :خطأ فادح LNK1120:1 externals لم يتم حلها خطأ في تنفيذ link.exe.

TestComms.exe - 2 error(s) 0 تحذير(s)

أي اقتراحات ؟ لقد فقدت معظم من الصباح إلى هذا و لا تريد أن تفقد معظم فترة ما بعد الظهر أيضا.

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

المحلول

احتمال واحد يكمن مع Win32 ANSI/يونيكود "الاسم-تغيير اسم" يتحول فيه رمز GetMessage إما إلى GetMessageA أو GetMessageW.هناك ثلاثة احتمالات:

  1. يقوم نظام ويندوز.ح لم يتم تحميلها, لذلك GetMessage يبقى GetMessage

  2. يقوم نظام ويندوز.ساعة كانت محملة رموز مجموعة ANSI, لذا GetMessage يصبح GetMessageA

  3. يقوم نظام ويندوز.ساعة كانت محملة مجموعة الرموز Unicode ، لذلك GetMessage يصبح GetMessageW

إذا كنت قد جمعت اثنين من الملفات المختلفة في الطرق التي تؤدي اثنين من السيناريوهات المختلفة ، سوف تحصل على رابط خطأ.ظهور رسالة خطأ تشير إلى أن Comms::Exception كانت الطبقة مثيل #2 أعلاه ربما انها تستخدم في مكان ما أن ويندوز.ح لم يتم تحميلها ؟

أشياء أخرى أود أن تفعل في منزلك, فقط كمسألة روتينية:

1) التأكد تشمل مسارات المكتبة لا تحتوي على أي شيء أنا لا أتوقع.

2) "بناء نظيفة" ثم يدويا التحقق من ذلك حذف أي إضافية كائن الملفات إذا لزم الأمر.

3) تأكد من عدم وجود أي ضمنية مسارات تشمل البيانات التي لا تعني ما تعنيه عندما المشروع أصلا إعادة بنائها.

تحرير:القتال مع التنسيق :(

نصائح أخرى

@كيرت:أعتقد أنك جاء أقرب.لم يتم اختبار هذا ولكن أعتقد أنه نوع من أعطى الجواب في السؤال الأصلي.

GetMessage هو تعريف في نظام التشغيل Windows.ساعة ملفوفة في ifndef كتلة التبديل بين Ansi (GetMessageA) و Unicode (GetMessageW).

على افتراض أنك لم futzed حولها مع إعدادات المشروع حذف شيء أنت لا ينبغي أن يكون (حيث أتوقع التبعيات الخارجية مثل User32.lib أن يكون):

تحقق أدوات | خيارات | أدلة | مكتبات (من الذاكرة) و التأكد من أن كنت لا في عداد المفقودين المشتركة-كل-حديقة متنوعة lib الدلائل (مرة أخرى ، دون VC6 أمامي لا أستطيع أن أقول لك ما هم)

هذه هي مشكلة عامة مع الطريقة التي عالجت مايكروسوفت ANSI مقابلUnicode واجهات برمجة التطبيقات.لأنها هي كل (أو تقريبا كل) يتم ذلك من خلال تحديد وحدات الماكرو على وظيفة الأسماء التي حل 'A' أو 'W' إصدارات وظيفة الأسماء التي لا يمكن أن يكون بأمان معرف في مساحة الاسم الخاصة بك/الطبقة/البنية/enum/وظيفة مباريات Windows API اسم.

النوافذ.ح وحدات الماكرو تشغيل عرض الحائط على سائر الأسماء.

يقوم نظام ويندوز.ساعة إعلان في أعلى IOCompletionPort.ح كما تشمل - لقد سئمت من رؤية 7 خطوط فقط تشمل 1 الملف لذلك يجب ملفوفة الملفات الخاصة بها و التي تشمل نفسها.هذا يحتوي أيضا على بعض إضافية #تعرف (أي ULONG_PTR) الرئيسية لدينا التطبيق لا تجمع مع Platform SDK تثبيت:-(

  1. أن يتم تأكيد هذا الأمر.لا شيء خارج المكان.
  2. لقد فعلت ذلك - حذف بناء الدلائل
  3. لم أكن استخدام مسارات مضمنة.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top