سؤال

لدي تطبيق نحاول ترحيله إلى 64 بت من 32 بت.إنه .NET، تم تجميعه باستخدام إشارات x64.ومع ذلك، لدينا عدد كبير من مكتبات الارتباط الحيوي (DLL) المكتوبة بلغة FORTRAN 90 والتي تم تجميعها لـ 32 بت.الوظائف الموجودة في مكتبات FORTRAN DLL بسيطة إلى حد ما:تقوم بإدخال البيانات، وتسحب البيانات للخارج؛لا دولة من أي نوع.كما أننا لا نقضي الكثير من الوقت هناك، ربما يصل إجماليه إلى 3%، ولكن المنطق الحسابي الذي يتم تنفيذه لا يقدر بثمن.

هل يمكنني بطريقة ما استدعاء ملفات DLL 32 بت من رمز 64 بت؟تقترح MSDN أنني لا أستطيع ذلك.لقد قمت ببعض القرصنة البسيطة وتحققت من ذلك.كل شيء يلقي استثناء نقطة دخول غير صالحة.الحل الوحيد الممكن الذي وجدته حتى الآن هو إنشاء أغلفة COM+ لجميع وظائف DLL ذات 32 بت واستدعاء COM من عملية 64 بت.هذا يبدو وكأنه صداع تماما.يمكننا أيضًا تشغيل العملية في محاكاة WoW، ولكن بعد ذلك لن يتم زيادة سقف الذاكرة، حيث يصل الحد الأقصى إلى حوالي 1.6 جيجابايت.

هل هناك أي طريقة أخرى لاستدعاء ملفات DLL 32 بت من عملية CLR 64 بت؟

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

المحلول

ستحتاج إلى تحميل ملف dll 32 بت في عملية منفصلة 32 بت، وأن تتواصل عملية 64 بت معه عبر الاتصال بين العمليات.لا أعتقد أن هناك أي طريقة يمكن من خلالها تحميل ملف dll 32 بت في عملية 64 بت بخلاف ذلك.

هناك مقالة جيدة جدًا هنا:

الوصول إلى ملفات DLL 32 بت من كود 64 بت

نصائح أخرى

تحتاج إلى كتابة عملياتك القابلة للتنفيذ كعمليات 32 بت (مقابل أي وحدة معالجة مركزية أو x64) بحيث يتم تحميلها باستخدام WoW32 لنظام التشغيل Vista.سيؤدي هذا إلى تحميلها في وضع المحاكاة 32 بت ولن تواجه مشكلة نقطة الدخول.يمكنك ترك مكتباتك في وضع AnyCPU، ولكن يجب تجميع ملفاتك التنفيذية على أنها x86.

إجابة جون صحيحة إذا كنت لا تريد إعادة ترجمة ملفات dll الموجودة لديك؛ولكن قد يكون هذا خيارًا لك أيضًا.

يقوم فريقنا حاليًا بترحيل كود FORTRAN x86 الخاص بنا إلى x64 لزيادة سقف الذاكرة.

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