נשלח בתאריך: 03 April 2006 בשעה 16:54 | | IP רשוּם
|
|
|
|
שלום אנשים ![](smileys/smiley1.gif)
אני אקצר את הסיפור שמאחורי התוכנית שלי ואסביר:
יש לי ממשק שכתבתי לי בC#
וקוד שכתבתי בC++ והפכתי לDLL
את הDLL הזה אני טוען בתוך תוכנית הC# שלי על ידי
[DllImport]
אני מכריז על הפונקציה שלי ומשתמש בה...
עד עכשיו הכל טוב עשיתי ככה כמה פונקציות והכל עבד יפה...
עד שהגיעה בעיה...
פונקציה אחת שנמצאת אצלי בקוד C++ מחזירה מבנה שהאיבר היחידי שלו הוא מערך של מבנים אחרים
יש מבנה סתם
int a;
int b;
שנקרא hello
ומבנה אחר שהאיבר שלו הוא
hello test[10];
והוא נקרא(המבנה)
goodbye
עכשיו בחזית הC# יצרתי בדיוק אותו מבנה אותם סוגים אותו גודל אותו קטע...
הגדרתי שהפונקציה שאני טוען מתוך הDLL מחזירה את המבנה המיוחד
וברגע שקראתי לפונקציה קבלתי את השגיאה הבאה:
Method's type signature is not PInvoke compatible.
עכשיו התעצבנתי הרצתי בדיקות והגעתי למסקנה שהמערך הורס לי !!
*בדקתי גם עם פונקציה שמחזירה במקום מבנה של מערך של מבנים
סתם מערך רגיל או מבנה עם מערך בתוכו וברגע ששמתי את המערך בהערה
הכל רץ חלק
אז הבעיה היא בהגדרת מערך בין אם זה בתור איבר במבנה הפנימי או במבנה החיצוני
אני חושד בעובדה שהגדרתי את המערך ככה: Type[] Name;
ואני יודע שזה רק רפרנס וצריך גם לאתחל אותו עם
Name = new Type[Size];
אבל אני לא יודע איך לעשות את זה למבנים
אם למישהו יש הצעה כלשהי בבקשה... זה יעזור לי מאוד
|