سؤال

أواجه تطبيق C # (.NET 3.5 و VS2005) الذي يستخدم مكتبة 32BIT غير المدارة مكتوبة في C / C ++. API الذي أستخدمه هو مثل هذا:

باطل * تهيئة (INT X)؛

Voic GetData (فراغ *)؛

وهذا يعمل عند تشغيله على نظام التشغيل Windows XP 32bit، ولكن على نظام التشغيل Windows XP64Bit، فإنه يرمي الاستثناء:

استثناء غير معالج: System.Reflection.targetinvocationException: تم إلقاء استثناء من قبل هدف الاحتجاج. ---> system.badimageformatexception: تم إجراء محاولة لتحميل برنامج بتنسيق غير صحيح. (استثناء من HRESult: 0x8007000b) في Aktuelizator.commonlibrary.initializervbuffer (Int32 Dim) في Aktuelizator.aktuelizatorwservice.aktuelizatorws..ct ()

تعمل هذه أعمال DLL غير المدارة أقل من 64 بت مكاني عند الطلب من تطبيق 32BIT Unmanages Writetn في C / C ++.

هل يوجد لدى أحد أي فكرة؟

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

المحلول

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

نصائح أخرى

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

تحقق من جميع المعلمات التي يتم تعريفها باسم Int32، والتي يجب أن تكون في الواقع Intptr.

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