سؤال

وانا بحاجة الى بعض التوضيح الأساسي على الربط ثابت C ++. لدي ملف يسمى data_client.lib. هناك ثلاثة المستهلكين مستقلة عن ملف مكتبة a.exe، b.exe وc.exe. هناك خدمة تسمى data_server.exe التي data_client.lib هو واجهة. في الواقع، وأضفت وظيفة أخرى لdata_server.exe واجهة الموافق data_client.lib. منذ فقط a.exe يحتاج إلى وظيفة اضافية، وبناء a.exe فقط. أنا شحنت data_server.exe، data_client.exe وa.exe كما التصحيح. الآن، b.exe وc.exe تعطل عشوائيا / غير متسق رمي

<اقتباس فقرة>   

وmfc42u! CException :: `RTTI كاملة   كائن محدد '+ 0x10

هل يعقل؟ إذا أنا أيضا بناء b.exe وc.exe، ثم تحطم لا يحدث. هل هذه هي الطريقة التي يعمل بها؟

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

المحلول

<اقتباس فقرة>   

والواقع، وأضفت وظيفة أخرى لdata_server.exe واجهة الموافق data_client.lib.

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

ومن الممكن أيضا أن تحطم الخاص لها على الاطلاق للا علاقة لها بهذا وليس هناك مشكلة أخرى يحدث ... ولكن من وصفك، أموالي على قضية vtable. لو كان لي، كنت إعادة ترجمة b.exe وc.exe واختبار مرة أخرى قبل التحقيق قضايا أخرى.

نصائح أخرى

وربما لم يكن لديك تبعيات واضحة، ولكن بعض من رؤوس مشروعك يستخدم، أو وضع معلومات ضمنا إلى المكتبة الخاصة بك.

وأنا لا أعرف عن الخطأ، ولكن التطبيقات الخاصة بك b.exe وc.exe تستخدم نسخة قديمة من ليب ملزمة للتواصل مع الإصدار الأحدث من data_server.exe. قد تكون بعض المؤشرات v_table خارج أو شيء من هذا إذا قمت بإضافة وظيفة. لديك بالتأكيد لاعادة بناء جميع المكتبات.

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