050-5994911   doron@doronamir.comדורון אמיר יעוץ הדרכה ופיתוח תוכנה    MCT \ MCSD

 

www.doronamir.com

E-mail: doron@doronamir.com

 

חלק א' : גישה לקובץ DLL לא מנוהל מתוך סביבת קוד לא מנוהל

תחילה נבנה פרוייקט DLL לא מנוהל בעזרת סביבת הפיתוח 6 Visual Studio  , ובשפת הפיתוח vb6 שאינה שפת פיתוח מנוהלת

בסביבת הריצה CLR  של ה- .NET

 

 

בגוף המחלקה נגדיר מתודות פשוטות המחזירות סכום , הפרש , ומכפלה , כל הפונקציות מקבלות את הפרמטרים

בשיטת ref .

 

 

 

נייצר את קובץ ה DLL

 

 

שמירת קובץ ה DLL 

 

 

לאחר יצירת ה DLL ניתן לבנות ממשק משתמש אשר יעזור לנו לגשת אל הקובץ ולשלוח פרמטרים אל המתודות

המוגדרות במחלקה. בסביבת הפיתוח הקודמת ניתן לייצר פרוייקט Standard EXE המכיל טופס = Windows Application

 

 

 

 

ע"י הפעולה References ניתן לקשר את הפרוייקט הנוכחי אל קובץ ה DLL המכיל את המחלקה

 

בחירת קובץ ה DLL עבור יצירת ההתקשרות

 

 

בניית קוד הגישה אל ה DLL מתוך פרוייקט לא מנוהל הניגש לקובץ DLL לא מנוהל

בקוד זה ניתן לראות כי נוצר מצביע  ואובייקט המייצגים את הפונקציונליות של המחלקה אשר הוגדרה ב DLL

ובנוסף לכך ניתן לראות גם את פונקצית ההמרה Cint  .

 

 

פעולת התכנית בסביבת קוד לא מנוהל

 

 

 

חלק ב' : גישה לקובץ DLL לא מנוהל מתוך סביבת קוד מנוהל

 

תחילה נבחר פרוייקט Windows Application  מתוך סביבת הפיתוח VS.NET

 

 

ניתן לעצב ממשק משתמש הדומה לממשק המקורי , מטרת הממשק החלונאי לאפשר לנו

לשלוח פרמטרים באופן ידידותי למשתמש

 

 

את הפרוייקט הנוכחי יש לקשר בדרך עקיפה אל הרכיב הלא מנוהל

ההתקשרות מתבצעת ע"י יצירת Interop Assembly   המאפשר את המרת הטיפוסים , זיהוי והעברת

הפרמטרים בין הקוד המנוהל אל הקוד הלא מנוהל וחזרה .

 

Interop Assembly  אפשר לייצר ע"י כלי התוכנה TLBimp.exe דרך חלון ה Command או ע"י שימוש עקיף

בעזרת סביבית הפיתוח NET.VS

יש לבחור בתווית COM ולנווט אל ה DLL : פעולת הרישום תתבצע אוטומטית אך ניתן לרשום את ה DLL

גם ע"י פקדות regsvr32  המבצעת רישום של ה DLL במערכת הרישום (registry) כך שניתן לבצע את פעולת התיווך והקישור גם ללא NET.VS

 

 

ניתן לראות את ה Reference החדש לאחר בחירת ה DLL

בחלון ה Solution  של הפרויקט.

 

בנוסף ניתן גם לראות את רכיב ה Interop Assembly  אשר מייצג את הרכיב הלא מנוהל

במסגרת הקוד המנוהל  ( כולל ניהול האובייקט בזיכרון ע"י ה- GC )

 

 

ריכב ה Introp Assembly ניתן לצפייה ע"י כלי הפיתוח ildasm.exe מאפשר לראות

את שמות המחלקות והמתודות של הרכיב הלא מנוהל כאילו היה מנוהל .

 

 

צפייה בתיאור המחלקה דרך ה ildasm.exe

צפייה בקוד ה IL (intermediate language) עבור המתודה Add  שהוגדרה ברכיב הלא מנוהל ומיוצגת כעת ע"י ה Interop Assembly

 

 

הקוד הנ"ל פונה דרך רכיב הרכיב המייצג  Proxy)   ( Interop Assembly  \   אל הרכיב הלא מנוהל ומוסר ומקבל נתונים .

 

הקוד מכיל יצירת מצביע ואובייקט המייצגים את המחלקה כולל שימוש במתודה Add , הטיפוסים עוברים המרה המותאמת לרכיב הלא מנוהל

כגון המשתנה Integer ב 6VB שקול לטיפוס Short ב .NET (המידע מוצג ע"י ה ToolTip בזמן התכנות כך שניתן לבחור סוג המרה גם בזמן פיתוח)

 

private void button1_Click(object sender, System.EventArgs e)

       {

DoronAmir.MathClassClass obj1 = new DoronAmir.MathClassClass();

short x = short.Parse(textBox1.Text) ;

short y =short.Parse(textBox2.Text);

label1.Text = obj1.Add(ref x,ref y).ToString();

       }

 

 

  doron@doronamir.com דורון אמיר יעוץ הדרכה ופיתוח תוכנה    MCT \ MCSD