سؤال

كنت مؤخرا ترقية c# خدمة windows تشغيل 64 بت .صافي العملية.عادة هذا سيكون تافها ، ولكن النظام يجعل من استخدام DLL 32-بت مكتوب في C++.فإنه ليس من خيار لتحويل هذا DLL 64 بت ، لذلك أنا ملفوفة DLL في فصل 32 بت .صافي عملية يتعرض لها .صافي واجهة طريق الاتصال عن بعد.

هذا هو حل موثوق بها ، ولكن أود أن تفضل تشغيل النظام عملية واحدة.هل هناك أي طريقة أستطيع تحميل بي 32 بت DLL إلى 64 بت عملية الوصول إليه مباشرة (ربما من خلال بعض النوع من thunking طبقة)?

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

المحلول

لا, لا يمكنك.

سواء 16 بت و 32-بت Windows عاش في 32 بت خطي مساحة العنوان.شروط 16 و 32 الرجوع إلى حجم الإزاحة النسبية محدد.

...

أولا لاحظت أن كامل بحجم 16 بت مؤشر 32-بت شقة المؤشر هي نفس الحجم.قيمة 0x0123:0x467 يتطلب 32 بت و رائع جدا لا 32-بت المؤشر.وهذا يعني أن هياكل البيانات التي تحتوي على مؤشرات لا تغيير الحجم بين 16-بت و 32-بت نظرائهم.مفيد جدا مصادفة.

لم يكن أي من هذين الملاحظات ينطبق على 32 بت إلى 64-بت thunking.حجم المؤشر قد تغير ، وهو ما يعني أن تحويل 32 بت بنية 64 بت هيكل والعكس بالعكس تغيير حجم هيكل.و 64 بت مساحة العنوان أربعة مليارات مرات أكبر من 32 بت مساحة العنوان.إذا كان هناك بعض الذاكرة 64 بت مساحة العنوان في تعويض 0x000006fb`01234567, رمز 32 بت سوف تكون قادرة على الوصول إليه.انها ليست مثل يمكنك بناء مؤقت عنوان النافذة ، لأن مسطح 32-بت رمز لا يعرف عن هذه مؤقتة عنوان ويندوز ؛ تخلوا عن محددات أتذكر ؟

http://blogs.msdn.com/oldnewthing/archive/2008/10/20/9006720.aspx

نصائح أخرى

وإذا كان التطبيق. NET الخاص بك هو موقع على شبكة الانترنت التي تعمل في IIS يمكنك الالتفاف عليه.

وهناك صفحة ويب ASP.NET التي تعمل على IIS على جهاز 64 بت سوف تستضيفه إصدار 64 بت من عملية W3wp.exe، وإذا كان يستخدم صفحة الويب الخاصة بك 32 بت دلس ستفشل موقعك.

ولكن في IIS يمكنك الذهاب إلى الإعدادات المتقدمة للتجمع التطبيقات تشغيل الموقع، وتغيير "تمكين تطبيقات 32 بت" إلى true.

وحتى انها لا تزال غير قادرة على تشغيل 32 بت دلل داخل عملية 64 بت، وإنما كان يعمل w3wp.exe كعملية 32 بت بدلا من ذلك.

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