PracticU

Interoperability - חלק 1

בלי כתוביותעם כתוביות
PracticU › קורס תכנות מתקדם - #Advanced .NET C › Interoperability - חלק 1
מילון מושגים:
.NET - פלטפורמת פיתוח של מיקרוסופט להרצת יישומים בשפות כמו C#, הכוללת ספריות וסביבת ריצה משותפות.
DLL - קובץ ספרייה ב-Windows המכיל קוד ופונקציות שתוכנות שונות יכולות לטעון ולהשתמש בהן במשותף.
C# - שפת תכנות מונחית עצמים של מיקרוסופט, המשמשת בעיקר לפיתוח יישומים על פלטפורמת .NET.
מאפיין - תכונה שמצמידים לרכיב ומתארת אותו או את התנהגותו, למשל מאפיין של תגית HTML או שדה באובייקט.
ספרייה - אוסף קוד מוכן, כמו פונקציות ומחלקות, שמפתחים משתמשים בו בתוכניותיהם במקום לכתוב הכול מחדש.
רג'יסטרי - מסד נתונים מרכזי ב-Windows ששומר הגדרות של מערכת ההפעלה ושל תוכנות מותקנות.
Visual Studio - סביבת פיתוח משולבת (IDE) של מיקרוסופט לכתיבה, ניפוי והרצה של קוד, בעיקר בשפות .NET.
פריימוורק - מסגרת תוכנה שמספקת מבנה וכלים מוכנים לפיתוח יישומים, כדי לחסוך כתיבת קוד חוזר.

Interoperability - חלק 1
הסרט פותח נושא Interoperability: איך תוכנית .NET קוראת לפונקציות שנכתבו בשפה אחרת, כמו DLL בשפת C, שולחת להן פרמטרים ומקבלת תשובה, בלי לכתוב מחדש את הליבה.
השלבים העיקריים
1. הבעיה: ארגון יכול להחזיק DLL ישן וחזק בשפת C, ורוצה רק לבנות ממשק חדש ב-.NET. צריך לפתור את הבדלי הטיפוסים בין השפות. לדוגמה, long ב-C הוא ארבעה בתים, ו-long ב-C# הוא שמונה בתים, ולכן שולחים int, כלומר לפי גודל הנתון ולא לפי שם הטיפוס.
2. Windows API: מערכת ההפעלה חושפת פונקציות שאפשר לקרוא להן מ-.NET, וכל פונקציה נמצאת בתוך DLL מסוים, למשל kernel32. בשיעור מוצגת התוכנה API Guide, שמראה את שם הפונקציה, הפרמטרים, הטיפוסים וה-DLL שבו היא נמצאת.
3. חתימה של פונקציה חיצונית: מגדירים פונקציה סטטית עם המילה extern ועם המאפיין DllImport שמציין את שם ה-DLL. אפשר לשנות את שם הפונקציה בעזרת EntryPoint, ולציין CallingConvention כשהשיטה שבה מועברים הפרמטרים שונה.
4. דוגמה Beep: הפונקציה Beep משמיעה צליל ברמקול הפנימי של המחשב ומקבלת תדר ומשך. בשיעור הושמעו צלילים בתדרים שונים.
5. דוגמה PlaySound: הפונקציה PlaySound מ-winmm משמיעה קובץ צליל. מעבירים לה נתיב לקובץ ודגלים, וההצלחה נבדקה בהשמעה.
6. מחרוזות: ב-.NET יש מחרוזת אחת, אבל ב-C יש סוגים שונים. בשיעור BSTR לא עבד, ו-LPStr עבד. הסוג נקבע בעזרת MarshalAs ו-UnmanagedType.
7. struct משותף: ב-DLL בשפת C נכתב struct בשם Point עם שלושה שדות, ושלוש פונקציות PowerX, PowerY ו-PowerZ מחשבות חזקה. הפונקציות נחשפות החוצה בקובץ def שמכיל LIBRARY ו-EXPORTS.
8. סדר שדות: בהעברה ל-.NET הערכים הגיעו בסדר הפוך. הפתרון הוא StructLayout עם LayoutKind.Explicit, ו-FieldOffset לכל שדה לפי הגודל שלו.
9. COM: DLL בשפת C++ או Visual Basic 6 נרשם ברג'יסטרי ומופיע בכרטיסייה COM של References. Visual Studio יוצר עוטף .NET, ובשיעור הדוגמה היא ADODB עם Recordset. כדי שההידור לא ינסה להטמיע את ה-DLL באסמבלי, מגדירים את Embed Interop Types ל-False.
שימו לב
- המשתמש של האפליקציה חייב לקבל את אותו DLL, לא רק את הפריימוורק.
בסוף תדעו לקרוא לפונקציות C ו-COM מתוך .NET, ולהתאים בין הטיפוסים של שתי השפות.
השיעור הבא בקורס: Interoperability - חלק 2

פרקי ההרצאה: Interoperability - חלק 1

  1. 00:00

    מהו Interoperability והצורך בו

  2. 03:04

    מחלקה לעבודה עם DLL בשפת C

  3. 03:42

    פונקציות Windows API

  4. 06:08

    חיפוש פונקציות עם API Guide

  5. 10:06

    הגדרת חתימת הפונקציה Beep

  6. 11:06

    התאמת גדלי משתנים בין C ל-C#

  7. 12:40

    שימוש ב-DllImport ו-EntryPoint

  8. 15:18

    קריאה לפונקציה PlaySound

תמלול ההרצאה: Interoperability - חלק 1

הטקסט המלא של הדקות הראשונות בהרצאה «Interoperability - חלק 1» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:04

    אנחנו מגיעים לנושא שנקרא interoperability. השם הארוך הזה סך הכל אומר איך אנחנו יכולים להשתמש במערכות אחרות, כלומר בדיאללים לדוגמה שנכתבו בשפה אחרת לקרוא לפונקציה שנמצאת בהם, לשלוח לפרמטרים, לקבל תשובה וכמובן יש כאן איזשהו אישיו שאנחנו צריכים לפתור כי יכול להיות שהמערכות האלה מכירות סוגים שונים של משתנים.

  2. 00:39

    לדוגמה, סטרינג לא נראה כמו סטרינג שלנו, אינטג'ר אצלהם זה לא אותו הגודל של אינטג'ר שלנו, ואיך בכלל אנחנו קוראים לפונקציה שנכתבה ב-DLL בשפת C לדוגמה?

  3. 00:54

    מה הנוהל לעשות את זה? אז כל פעם שאנחנו רוצים להתממשק למערכות אחרות מבחינת שפות תכנות אחרות, אז הנושא הזה נקרא interoperability, ויש טכניקה ספציפית לעשות את זה.

  4. 01:08

    קודם כל, למה לנו לעשות את זה? יכול להיות שהארגון שלנו עבד במשך הרבה זמן, לא יודע, שנתיים, ויצר איזשהו DLL מאוד מאוד חזק בשפת C, כי זה היה מאוד ישן.

  5. 01:24

    פעם מזמן הוא יצר את ה-DLL הזה, ה-DLL הזה עושה חישובים, עיבוד תמונה, כל מיני דברים מאוד מסובכים, והוא מאוד מהיר.

  6. 01:33

    שנתיים עבדו על זה עשרה מתכנתים, אנחנו לא רוצים עכשיו לקחת את ה-DLL הזה שהוא דווקא עובד טוב, בדקו אותו, הכל בסדר איתו, לזרוק אותו ולכתוב אותו מחדש.

  7. 01:43

    אנחנו רק רוצים לשפר את המערכת אז אנחנו בונים user interface יותר מרשים ב-dotnet לדוגמה, אבל הליבה עצמה עדיין יכולה להיות כתובה במערכת ישנה.

  8. 01:54

    אז כאן קורה מצב שבו אנחנו רוצים להשתמש באותו DLL, אנחנו רוצים מ-csharp.net לקרוא לפונקציות שכתובות ב-DLL הזה.

  9. 02:04

    מה אנחנו הולכים לראות כרגע? בפרטון הזה אנחנו הולכים להתממשק לפונקציות, לקרוא לפונקציות שנכתבו ב-FAT-C, לקרוא לפונקציות ולהשתמש ברכיבים שנכתבו ב-C++ או Visual Basic 6, לראות אם בונים ב-FAT-C משהו שהוא שונה ממה שיש לנו, איך אנחנו יכולים לבצע אינטגרציה איתו, ואם אנחנו מקבלים איזשהו

  10. 02:31

    קטע של זיכרון, לדוגמה מערך או מטריצה, אנחנו מקבלים איזה אובייקט בזיכרון שנמצא בזיכרון של Unmanaged Code לדוגמה C++ איך אנחנו יכולים עכשיו מתוך C-Sharp להשתמש עם אזור הזיכרון הזה מבלי שתהיה פה סכנה שה-Garbage Collector יכול להזיז לנו פוינטרים וכו'.

  11. 02:56

    הדבר הראשון שאנחנו הולכים לראות זה עבודה עם שפת C. אז קודם כל מה שאנחנו צריכים לעשות כאשר אנחנו רוצים לעבוד עם dll בשפת c וללכת בפרויקט שלנו ולבנות לעצמנו מחלקה נפרדת אנחנו רוצים לעבוד כרגע עם איזושהי פונקציה שנמצאת בתוך dll שנכתב בשפת c אנחנו יכולים לכתוב dll כזה בעצמנו זה משהו שאנחנו הולכים לעשות עוד מעט

  12. 03:28

    אבל בואו בתור התחלה נשתמש בdll קיים איפה יש לנו dll קיים אז למעשה מערכת ההפעלה windows עצמה הליבה שלה נכתבה בעזרת סדרה של DLL'ים שנכתבו בשפת C.

  13. 03:46

    אנחנו יכולים לקרוא לפונקציות ב-DLL'ים האלה שווינדוס עצמה חשפה לנו. הפונקציות האלה נקראות פונקציות API של ווינדוס, ולכן בואו ניקח פה מחלקה ונקרא לה Windows API.

  14. 04:03

    API זה קיצור של Application Programming Interface, וזה בעצם מונח שאומר אילו פונקציות ושירותים מערכת חושפת למתכנתים, חושפת לנו.

  15. 04:17

    Windows API זה כל הפונקציות שווינדוס עצמה כמערכת הפעלה חושפת למתכנתים ואומרת להם אחלה אתם מתכנתים, אתם יכולים לקרוא לפונקציות שלי של Windows ואני אעשה מה שהפונקציה עושה.

  16. 04:30

    בעזרת הפונקציות האלה אפשר לעשות מגוון של דברים, אפשר לעשות ריסטארט למחשב, אפשר לשנות את הצבעים של החלונות, אפשר לעשות המון דברים שווינדוס בייסיקלי מסוגלת לבצע וחושפת לנו אפשרות שגם אנחנו נעשה את זה דרך הפונקציות הללו.

  17. 04:48

    לא רק ווינדוס חושפת פונקציות API, כל מערכת יכולה לחשוף API משלה. לדוגמה, מערכת ישנה iCQ פעם חשפה פונקציות שמאפשרות לשלוח הודעות דרך iCQ, כלומר אנחנו יכלנו לכתוב תוכנית בעצמנו שמתממשקת ל-API שלהם ושולחת הודעות כאילו שאנחנו iCQ.

  18. 05:10

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

  19. 05:28

    עכשיו, מה שאנחנו צריכים לעשות זה לבנות פונקציה public static, פונקציה סטטית, עם המילה extern.

  20. 05:39

    זה אומר שאנחנו לא באמת הולכים לכתוב את התוכן של הפונקציה כאן, כי הרי אני לא רוצה לכתוב את הפונקציה הזאת בעצמי, אני רוצה לקרוא לפונקציה הזאת שנמצאת בווינדוס.

  21. 05:51

    כל מה שאני צריך לעשות זה להגדיר רק את החתימה שלה, איך הפונקציה הזאת נראית. אבל איך אני יודע איזה פונקציה יש לווינדוס?

  22. 06:00

    ואיפה אני מחפש אותם? ואיך קוראים לפונקציה בכלל? ואיזה פרמטרים אני צריך לשלוח ולקבל? כמובן שאני יכול ללכת ולחפש בגוגל איך עושים את זה, אבל בואו נסתכל על איזושהי תוכנה שנקראת API Guide, תוכנה חינמית.

  23. 06:19

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

  24. 06:34

    והתוכנה הזאת, כל מה שהיא עושה, היא מאפשרת לנו לראות אילו פונקציות API קיימות למערכת הפעלה Windows. הנה יש לנו פה קיצור דרך, בואו נריץ אותה. על ההתחלה אמור להופיע איזה חלון של טיפים או readme פייל או משהו כזה שאנחנו יכולים להיפטר ממנו או אפילו הוא לא הופיע לי בגרסה הזאת ומה שאנחנו רואים כאן בצד זה בעצם

  25. 07:02

    פונקציות רשימה של פונקציות api ששייכות לווינדוס כאן אנחנו יכולים לסדר אותם בצורה אלפביתית פה אנחנו יכולים לסדר אותם לפי קבוצות ובכל מקרה אנחנו יכולים לבצע פה איזשהו חיפוש ולמצוא את הפונקציות שאנחנו מחפשים לדוגמה הנה פונקציה שנקראת ביפ זאת פונקציה ביפ, זאת פונקציה ששייכת למערכת ההפעלה Windows שמצליחה להשמיע קול ברמקולים הפנימיים שקיימים בתוך המחשב.

  26. 07:35

    ברמקולים של הלוח M לדוגמה, יש שם איזשהו רמקול כזה שכל פעם שאתם מדליקים את המחשב אתם שומעים איזשהו צפצוף.

  27. 07:42

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

  28. 07:54

    והצפצופים האלה שאתם שומעים זה צפצופים מרמקול פנימי של המחשב. כמובן, מערכת הפעלה יש לה גישה לחומרה, אז היא מסוגלת לעשות את זה.

  29. 08:02

    והיא אומרת לנו, הנה פונקציה אם אתם רוצים, גם אתם יכולים להפעיל את הרמקול הפנימי של המחשב. אז כאן אנחנו רוצים כרגע לקרוא לפונקציה. הפונקציה נקראת b, אחלה.

  30. 08:13

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

  31. 08:33

    השם הזה נקרא kernel32 לא כל פונקציה נמצאת באותו DLL כמובן. הפונקציה הספציפית הזאת ביפ נמצאת בקרנל32 שם של DLL שהוא אחד מה-DLLים של הליבה של Windows.

  32. 08:47

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

  33. 09:00

    פה אנחנו רואים שיש פרמטר שנקרא dwfreak, פה אנחנו יכולים לראות את התיאור שלו איפשהו פה, הנה זה כאן, dwfreak, וfreak זה קיצור של Frequency, וזה אומר שאנחנו יכולים לשלוח איזשהו תדר בשביל להשמיע את הסאונד.

  34. 09:27

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

  35. 09:54

    מה שאנחנו צריכים עכשיו בשביל לקרוא לפונקציה אוקיי אז אנחנו יכולים להגדיר את החתימה שלה חתימה של הפונקציה הזאת זאת זאת חתימה שמחזירה לונג, נקראת ביפ, מקבלת לונג dw freak, מקבלת לונג dw duration.

  36. 10:21

    אם אני לא טועה, זאת הייתה החתימה, בואו נסתכל על זה עוד פעם ונראה שזה dw duration as long long dw freak, מעולה. עכשיו חשוב להבין כמה דברים לגבי כל הסיפור הזה.

  37. 10:39

    דבר ראשון, במובן שהשמות של משתנים שפעם היו נותנים ב-Fat C זה שמות קצת לא ברורים, התחילו אותם בכל מיני תחיליות שקשורות לטיפוסים, DW זה Double World, והשמות לא היו הכי ברורים בעולם.

  38. 10:54

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

  39. 11:04

    זה Frequency, זה Duration, מאוד פשוט. הדבר הבא, מאוד חשוב, הפונקציה עצמה מקבלת לונג אבל היא כתובה בשפת C.

  40. 11:19

    לונג בשפת C הוא ארבעה בתים. אנחנו נמצאים ב-C-Sharp. לונג ב-C-Sharp זה שמונה בתים. כאן בדיוק מגיע אחד הדברים החשובים שבו אנחנו צריכים להיות מאוד בריכוז כאשר אנחנו עובדים עם זה וזה פשוט מאוד איך אנחנו מבצעים התאמה בין המידע שאנחנו שולחים למידע שאנחנו מקבלים.

  41. 11:52

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

  42. 12:06

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

  43. 12:23

    הדבר הבא, אם אנחנו לא רוצים לקבל את התשובה בחזרה, אנחנו לא חייבים, אנחנו יכולים להגדיר את זה עם וויד. אני כרגע אגדיר את זה עם וויד.

  44. 12:32

    עכשיו, איך המערכת יודעת בדיוק איפה נמצאת הפונקציה הזאת? באיזה DLL? מה המיקום שלו? איך הוא נקרא? כאן אנחנו משתמשים באטריביוץ שלמדנו, שנקרא DLL import, שמציין ל-CLR איפה בדיוק לחפש את הפונקציה הזאת.

  45. 12:50

    די.אל.אל אימפורט פשוט מקבל את השם של הדי.אל.אל ואנחנו ראינו שהשם שלו נקרא kernel32. אנחנו יכולים לחזור ולראות שזה השם kernel32.

  46. 13:06

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

  47. 13:19

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

  48. 13:39

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

  49. 13:53

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

  50. 14:22

    לי פריקוונסי בואו ניתן לה 2000 וכמה זמן אתם רוצים להשמיע בואו ניתן 1000 נריץ את התוכנית ואני לא יודע אם שמעתם או לא שמעתם אבל בהחלט היה פה צפצוף בואו ננסה 4 קילו הרץ יש פה צפצוף קצת יותר גבוה בואו ננסה 1000 קילו הרץ יש פה צפצוף קצת יותר נמוך בקיצור הפונקציה עובדת פרפקט אתם אם לא שמעתם את זה ברמקולים כי זה

  51. 15:04

    היה חלש מדי אתם מוזמנים לנסות את זה ולראות שזה עובד פרפקט. בואו ננסה פונקציה נוספת. נחזור בחזרה ל-API גייד ונחפש כאן פונקציה שנקראת playSound.

  52. 15:27

    הנה פונקציה שנקראת playSound אבל אני מחפש פונקציה אחרת והפונקציה שאני מחפש נקראת snd playSound. snd playSound זאת פונקציה שמסוגלת להשמיע מוזיקה.

  53. 15:46

    היא נמצאת ב-DLL שנקרא winMM, קיצור של Windows מולטימדיה ובואו נראה איזה פרמטרים היא מקבלת. היא מקבלת איזשהו Sound Name, Long Pointer, כל מיני קיצורים של שפת C, A String That Specifies the Sound to Play.

  54. 16:09

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

  55. 16:37

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

  56. 16:59

    לדוגמה. אוקיי, אז בואו נשתמש בפונקציה snd playsound שנמצאת ב-winmmdll. נחזור בחזרה, אנחנו צריכים לבוא לפה, public static x term, לא נקבל בחזרה את הערך שהיא מחזירה, אין צורך, ונקרא לה playsound משלנו, כמובן אנחנו הולכים

  57. 17:27

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

  58. 18:00

    claysound חובה ksensitive הכל ובואו נסתפק בזה, נבוא בחזרה למיין, נגיע לפה, נקרא ל-windows api.playsound בואו ניתן את הנתיב הבא, בתוך תקיית windows יש לנו תקייה שנקראת מדיה ובתוך מדיה אמור להיות לנו איזה קובץ, שימס וואו.

  59. 18:45

    קובץ שמשמיע איזשהו סאונד מאוד מאוד קצר, בואו נלך ונגיד שהדגל שאנחנו מעבירים זה 0, נזרום, נראה מה קורה עם 0. נריץ, ושמענו איזשהו סאונד, שזה הסאונד שיש שם, בואו נריץ עוד פעם.

  60. 19:04

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

  61. 19:31

    מאוד מאוד נוח אני רוצה טקסט זה סטרינג ב-C

לקורס המלא: קורס תכנות מתקדם ב‑#C ודוט-נט

ההרצאה הקודמת: תרגילים על Client-Server Architecture ב-#C

ההרצאה הבאה: Interoperability - חלק 2

קורסים נוספים במסלול

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס ADO.NET - חיבור אתר למסד נתונים
  • קורס WCF - תקשורת למתקדמים בדוט-נט