יום חמישי, 14 באוקטובר 2010

Dllimport 0x000007b

the application failed to initialize properly 0x000007b

תקלה נופצה במערכות שעברו השבה מסביבת 32BIT ל 64BIT, כאשר אנחנו מנסים להפעיל קוד בסביבת
Manage Code שקרוא לקוד בסביבה Unmanage Code נקבל הודעה: the application failed to initialize properly 0x000007b.

כשאנחנו מנסים לקרוא לפונקציה חיצונית שכתובה בשפת  (C (unmanaged code מתוך פונקציה בתוך הקוד שרשום ב  (C# (managed code הבעיה המרכזית היא ב Compiler של התוכנה ב managed code , ה Compiler ב Visual Studio מוגדר כ Any Cpu כברירת מחדל , כלומר יש התאמה למערכות 64 ו ה 32 ביט בקובץ עצמו, ובעצם הזכות למערכת הפעלה לבחור את התאמה של התוכנית לפני תחילת ריצת התוכנית.

אבל מה קורה עם הקובץ שאנחנו קוראים לו מתוך התוכנה? בניגוד ל managed code כאן מחוייב להגדיר לאיזה בדיוק מערכת הקובץ מותאם אם ל 64 או ל 32 ביט, ובעצם מכאן הבעיה, בגלל שהמערכת שומרת לה את הזכות לבחור את שיטת ההרצה היא תעדיף את ה 64 על פני ה 32 ובעצם מרחב הכתובות בזיכרון של התוכנה גדל, ואילו לקובץ שאנו קוראים מהתוכנית עובד בסביבת זיכרון מצומצמת של 32 ולכן לא ניתן לקשר בניהם אז קופצת התקלה.

אז איך ניתן לתקן?? הצורה שאני תיקנתי את זה היא פשוט ללחוץ עם הכפתור הימני על הפרויקט ולבחור Properties והיפתח לנו המסך הבא:


נבחר לנו את הפלטפורמה הרציוה x86 עבור מערכות 32 ו 64.
נעשה Build ועכשיו הפלטפורה היא 32 , ניתן לזהות שתוכנה רצה כ 32 ביט ע"י * ש ב task manager.

חשוב לציין שאם הפרויקט שלכם משולב עם Sln (solution) יש להגדיר בו את הגדרת הפלטפורמה:



 מומלץ לבנות את הקובץ ב Release.

בהצלחה...

אין תגובות:

הוסף רשומת תגובה