سؤال

أنا أستخدم مكتبة من الكود من برنامج تعليمي لتوفير وظائف لتمرير نقاط الوظائف لوظائف الأعضاء غير القتالية إلى وظيفة تتوقع مؤشر وظيفة ثابت http://www.codeproject.com/kb/cpp/thunk32.aspx يستخدم هذا الرمز مكتبة Boost ، التي قمت بتنزيلها وإعدادها أكثر أو أقل من كل شيء.

في مكتبة Thunk ، يحتوي أحد ملفات الرأس على قسم يقرأ

#define BOOST_PP_ITERATION_PARAMS_1 (3,(0,THUNK32_MAX_ARGS,"Thunk32_template.h"))
??=include BOOST_PP_ITERATE()
#undef BOOST_PP_ITERATION_PARAMS_1

لكن هذا يعطيني كميات ملحمية من الأخطاء ، والتي يمكنني حلها عن طريق تغييرها إلى

#define BOOST_PP_ITERATION_PARAMS_1 (3,(0,THUNK32_MAX_ARGS,"Thunk32_template.h"))
#include BOOST_PP_ITERATE()
#undef BOOST_PP_ITERATION_PARAMS_1

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

1>WebCamera.obj : error LNK2019: unresolved external symbol "protected: __thiscall indev::Thunk32Base::Thunk32Base(void)" (??0Thunk32Base@indev@@IAE@XZ) referenced in function "public: __thiscall indev::Thunk32<class WebCamera,void __cdecl(struct HWND__ *,struct videohdr_tag *)>::Thunk32<class WebCamera,void __cdecl(struct HWND__ *,struct videohdr_tag *)>(void)" (??0?$Thunk32@VWebCamera@@$$A6AXPAUHWND__@@PAUvideohdr_tag@@@Z@indev@@QAE@XZ)
1>WebCamera.obj : error LNK2019: unresolved external symbol "protected: __thiscall indev::Thunk32Base::~Thunk32Base(void)" (??1Thunk32Base@indev@@IAE@XZ) referenced in function "public: __thiscall indev::Thunk32<class WebCamera,void __cdecl(struct HWND__ *,struct videohdr_tag *)>::~Thunk32<class WebCamera,void __cdecl(struct HWND__ *,struct videohdr_tag *)>(void)" (??1?$Thunk32@VWebCamera@@$$A6AXPAUHWND__@@PAUvideohdr_tag@@@Z@indev@@QAE@XZ)
1>WebCamera.obj : error LNK2019: unresolved external symbol _capCreateCaptureWindowA@32 referenced in function "public: bool __thiscall WebCamera::Init(struct HWND__ *)" (?Init@WebCamera@@QAE_NPAUHWND__@@@Z)

أعتقد أن هذا يحاول أن يقول إن المُنشئ والمدمر لم يتم الإعلان عنه وأن webcamera.init () قد أفسد أيضًا. لقد تأكدت من أن المكتبة من أن تصدير مشروع Thunk32 مدرجة في مشروعي الآخر ، لكن ما زلت أحصل على هذه الأخطاء.

أود أن أعرف ما إذا كنت قد قمت بالافتراض الصحيح الذي ??=include كان ينبغي تغيير إلى #include وإذا كان لدي ، فما الذي ارتكبت خطأً أو فشلت في القيام بذلك النتائج في أخطاء الرابط هذه. أو إذا تمكنت من تزويدني بطريقة مختلفة للتمكن من تمرير مؤشر الوظيفة إلى وظيفة عضو غير منتظمة ستكون رائعة.

شكرًا

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

المحلول 4

حسنًا ، لقد تمكنت من حل هذا الآن.

مايكل بور قال نيكلي ذلك ??= هو في الأساس نفس الكتابة # ولكن بطريقة يمكن للأشخاص الذين ليس لديهم رمز التجزئة أن يكتبه ، انظر الغرض من تسلسل trigraph في C ++؟

هانز المارة ثم حصلت على الكرة المتداول بالنسبة لي شراء دعني أعرف أنني لم أرتبط بالكامل بالأشياء. كنت بحاجة إلى النقر بزر الماوس الأيمن على مشروعي الرئيسي ، واختيار "تبعيات المشروع" وحدد مشروعي الآخر الذي يحتوي على رمز Thunk32. كنت بحاجة أيضًا إلى إخبار مشروعي الرئيسي بالنظر إلى المكان الذي يوفر فيه مشروع Thunk Lib ، والذي تبين أنه في مجلد في مستنداتي (اشرح ذلك!). كنت بحاجة أيضًا إلى إضافة thunk32d.lib (لاحظ "D" لأنني كنت/أنا في وضع التصحيح. قال هانز إنني بحاجة winmm.lib ولكن اتضح (عندما غوغلينغ الوظيفة التي كانت تعطيني الخطأ الذي احتاجه Vfw32.lib في حين أن.

شكرا يا رفاق! آمل أنه من خلال إعطاء الإجابة الكاملة مثل هذا ، يمكن أن يساعد شخصًا آخر لديه مشكلة مماثلة.

نصائح أخرى

??= هو تسلسل "trigraph" ل # حرف. وفقًا للمعيار ، من المفترض أن يتم التعامل مع trigraphs كواحدة من الخطوات الأولى في المعالجة (في المرحلة الأولى - قبل أن يتعامل المعالج المسبق) ، لذلك:

??=include "whatever"

يجب أن تكون مكافئة ل:

#include "whatever"

لذلك يجب أن تكون قادرًا على استخدام هذا النموذج (أتساءل لماذا تم وضع Trigraph هناك في المقام الأول - ربما نوع من النكتة الشريرة؟)

ومع ذلك ، تسبب الرسائل ثلاثية المشاكل في المشاكل والارتباك (ربما أكثر مما تساعد) ، لذلك يبدو أن المترجمين يتحركون نحو التحذير عنها و/أو التخلف عن عدم التعامل معهم. المترجم في VS 2010 لديه معالجة Trigraph إيقاف افتراضيًا - يجب عليك استخدام /Zc:trigraphs خيار لتشغيله.

نرى الغرض من تسلسل trigraph في C ++؟ لمزيد من التفاصيل.

آه ، إينار ، رجل طيب. القيام بأشياء فلاش و SharePoint هذه الأيام ، أوتش. النرويجية ، قد تشرح trigraphs.

anyhoo ، لا شيء معقد ، لقد نسيت فقط أن تخبر الرابط أن ينظر إلى بعض المكتبات. انقر بزر الماوس الأيمن فوق مشروعك ، تبعيات المشروع ، وضع علامة على مشروع Thunk. هذا يضمن أن Thunk32.lib يتم النظر إليه ويحل CTOR و DTOR.

انقر بزر الماوس الأيمن مرة أخرى ، خصائص ، رابط ، تبعيات إضافية ، أضف "WinMM.Lib". الذي يحل رمز capcreatecapturewindow.

هل لديك مُنشئ ومدمر أعلن في فئة Indev :: Thunk32Base التي نسيت تحديدها في ملف CPP؟

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