كيف يمكنني تسمية DLL الأصلي الموزعة في كل من 32 بت و 64 بت؟

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

  •  24-09-2019
  •  | 
  •  

سؤال

لديّ منتج تجاري عبارة عن DLL (رمز 32 بت أصلي) ، والآن حان الوقت لبناء نسخة 64 بت منه. لذلك عند التثبيت على Windows 64 بت ، ينتقل الإصدار 32 بت إلى Windows Syswow64 ، ويذهب الإصدار 64 بت إلى ... Windows System32! (أنا أعض لساني هنا ...) أو يمكن تثبيت DLL (S) بجانب تطبيق العميل.

ماذا يجب أن أسمي DLL 64 بت؟

نفس الاسم مثل 32 بت: ملفان يقومان بنفس الشيء ، لهما نفس الاسم ، ولكنه غير قابل للترتيب تمامًا. أليس هذه وصفة للارتباك ودعم مشاكل؟

أسماء مختلفة (مثل المنتج. الوقت - .net كونه مجرد مثال واحد. والآن يتعين على جميع العملاء المترجمين بشكل ثابت إضفاء الطابع الشرعي على إعلانات الاستيراد: إذا كان الهدف = Win64 ، فستستورد بلاه من "Product64.dll" استيراد بلاه من "Product.dll" Endif

يحتوي المنتج على كميات هائلة من رمز C ، وجزء كبير من C ++ - نقله إلى C# ليس خيارًا.

نصيحة؟ اقتراحات؟

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

المحلول 3

لقد قررت متابعة Microsoft على هذا ، الذين احتفظوا بنفس الأسماء لـ DLLs في System32 عندما ذهبوا إلى 64 بت. على Win7/64 ، System32 avicap32.dll هو DLL 64 بت!

هناك بعض الالتباس المحتمل لنفسي ولعملائي ، مع DLL 32 بت و 64 بت مع نفس الاسم. ومع ذلك ، أعتقد أنه سيكون من الأسوأ أن يكون لدى جميع عملائي أن يجعلوا رمزهم حساسًا للعرض. خاصة مطوري .NET ، الذين يمكنهم غالبًا ترك النظام الأساسي المستهدف الخاص بهم إلى "anycpu".

نصائح أخرى

تطبيقات العميل لاتفعل يجب أن "تعرف" أنها 32 بت أو 64 بت. يقوم نظام التشغيل تلقائيًا بتحميل DLLs من الموقع المناسب لأنه لا يمكن تحميل DLL 32 بت في عملية 64 بت ، وليس من الممكن تحميل DLL 64 بت في عملية 32 بت.

إذا كان تطبيق 32 بت يحاول أن قم بتحميل شيء من System32 ، وسيقوم نظام التشغيل بإعادة توجيهه بصمت إلى دليل Syswow64 ، مما يفرض إصدار 32 بت على التحميل.

من خلال الحصول على أسماء مختلفة ، يمكنك هزيمة هذه الآلية بأكملها. آلية تم تصميمها خصيصًا للسماح لك باستخدام نفس الاسم.

لماذا لا بادئة DLL مع السطح السفلي ... مثل Product_32.dll و Product_64.dll؟ أو أشار إلى ذلك باستخدام بادئة النظام الأساسي - Product_x86_32.dll و Product_x86_64.dll؟ على الأقل هذا سوف يزيل الارتباك لتسمية DLL ... ما رأيك؟

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