c#- DllImport

מיי 3

New member
c#- DllImport

אני צריך להשתמש בפונקציות של c++ מתוך C#.

הגדרת הפונקציות ב c++ :

class MyClass{
void* data;
int index;
}

void getData(MyClass &myclass);
void setData (MyClass myClass);

איך מגדירים את הclass ב c#? ואיך מתבצעת הקריאה לפונקציות?
 

spiritus asper

New member
הכיוון הוא

להשתמש ב-StructLayout עבור ה-struct הדוט-נטי כדי לשלוט על סידור השדות בזכרון.
עבור שדה ה-void* תוכלי להשתמש ב-IntrPtr. אם הקוד ה-managed צריך להקצות את בלוק הזכרון, תוכלי להעזר בפונקציה Marshal.AllocHGlobal לטובת זה (כמובן שצריך לזכור גם לשחרר את הזכרון ..)
בפונקציית ה-getData תוכלי להעביר רפרנס לאוביקט שלך בעזרת מילת המפתח ref.

עקרונית יש את swig ( http://www.swig.org ) שאמור להצליח לחולל את קוד המעטפת. לא יצא לי לעבוד איתו, וממש שכן במקרה ראיתי, נראה שהוא מחולל הרבה יותר ממה שצריך וקצת מסבך את העניינים יתר על המידה.

האלטרנטיבה להתעסקות עם DllImport היא לכתוב את המעטפת ב-CPP/CLI. על הדרך תרוויחי גם באספק של ביצועים.
 
למעלה