هل يمكنني استخدام مكتبة ثابتة Visual Studio 6 مكتبة ثابتة C ++ في Visual Studio 2008؟

StackOverflow https://stackoverflow.com/questions/723416

سؤال

هل من الممكن استخدام مكتبة ثابتة C ++ (.LIB) مجمعة باستخدام Visual Studio 6 في Visual Studio 2008؟

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

المحلول

لا ينبغي أن أظن لماذا لا - طالما كنت تبقي حدود ذاكرة CRT المعتادة (أي إذا قمت بتخصيص الذاكرة داخل وظيفة المكتبة، فحدد دائما من داخل المكتبة - عن طريق استدعاء وظيفة في ليب للقيام بالتحرير).

يعمل هذا النهج غرامة ل DLLs التي تم تجميعها مع جميع أنواع المحامرة، يجب أن تكون Libs المرتبطة القانونية موافقا أيضا.

نصائح أخرى

انها تعتمد حقا. هل تعرض LIB "" وظائف "خارجية" خارجية فقط "حيث تتم إدارة الذاكرة من خلال طرق Win32 المستقيمة (CotaSkMemalloc، إلخ) أو المتصل أبدا يحرر الذاكرة المخصصة بواسطة Callee أو العكس؟ هل تعتمد فقط على المكتبات الأساسية التي لم تتغير كثيرا منذ مقابل 6؟ إذا كان الأمر كذلك، يجب أن تكون على ما يرام.

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

كمثال آخر، إذا قمت بتعريض فئات C ++ من خلال الواجهة، فهي تعتمد على مكتبات وقت تشغيل MS مثل MFC، وهناك فرصة أن تخطيط الفئة قد تغير بين VS 6 و VS 2008. وهذا يعني أن الوصول إلى عضو / حقل في الفصل يمكن انتقل إلى الشيء الخطأ وتسبب نتائج غير متوقعة. من المحتمل أنك تم تهيئها إذا كانت LIB تستخدم MFC بأي سعة. تحدد MFC واستخدامها داخليا الكثير من العالم من العالم، وأي إمكانية الوصول إلى Globals MFC بواسطة العمليات في .LIB قد تسبب حالات الفشل إذا تغيرت البنية التحتية MFC في بيئة الاستضافة (لقد تغيرت كثيرا منذ VS 6، BTW).

لم أستكشف بالضبط التغييرات التي تم إجراؤها في رؤوس MFC، لكنني رأيت سلوكا غير متوقع بين ثنائيات الطبقة الفئة المستندة إلى MFC / ATL التي تم تجميعها في إصدارات VS المختلفة.

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

نعم. يجب ألا تكون هناك مشاكل مع هذا على الإطلاق. كما gbjbaanb. المذكورة، تحتاج إلى مانع ذاكرتك، ولكن VS2008 ستظل تعمل معها. طالما أنك لا تحاول مزج CLR، (المدارة) رمز معها. أود أن أوصي بذلك إذا كان ذلك ممكنا. ولكن، إذا كنت تتحدث عن كود RAW C أو C ++، فمن المؤكد أنه سيعمل.

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

بالتأكيد سوف تعمل.

هل تسأل أين في VS2008 لرمز المراجع؟

إذا كان الأمر كذلك، فانتقل إلى Proj Props -> Linker -> الإدخال على خصائص التكوين على صفحات العقارات. ابحث عن "تبعيات إضافية" ورمز .LIB هناك.

انتقل إلى Proj Props -> رابط -> عام ورمز مسار Libs في "أدلة مكتبة إضافية".

يجب أن تفعل ذلك!

هناك حالات كانت الإجابة ليست، عندما انتقلنا من VS6 إلى VS2K5، كان علينا إعادة إنشاء جميع مكتباتنا، حيث أن نموذج الذاكرة قد تغير، ووظائف CRT حيث يختلف.

كانت هناك عدد قليل من التغييرات العاجلة بين VC6 و VS2003 و VS2005 و VS2008. توقف Visual C ++ (في VS2005) عن الدعم لمكتبة CRT الواحدة المرتبطة بشدة. بعض التغييرات كسر تعداد هنا و هنا. وبعد ستؤثر هذه التغييرات على استخدامك في VC6 Libs المبني في الإصدارات الأحدث.

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