פורסם 2007 בינואר 918 שנים אני אף פעם לא למדתי כתיבת DLLים או איך להשתמש בהם במטלב ועכשיו המנחה לפרויקט גמר שלי ביקש ממני לכתוב את הפוקציות בDLL ולקרוא להם ממטלב לשם האצת המהירות. מישהו יכול לתת לי דוגמא קצרצרה רק בכדי להבין את הרעיון? תודה
פורסם 2007 בינואר 918 שנים תפתח את המטלב תלך לעזרה אופציה אחת היא: MATLAB -> Extrenal Interfaces -> MATLAB interfaces to generic dll's אם יש לך DLL מוכן. יש עוד אפשרות: MATLAB -> Extrenal Interfaces -> Creating C language MEX files שזה קובץ C/C++ עם פונקצית Main מיוחדת שמהווה מעטפת לקישור עם MATLAB, מקמפלים ב- MATLAB ואז, תלוי בגרסא של ה- MATLAB , נוצר DLL או קובץ מקביל .mex### שניתן להשתמש בו כמו פונקציה רגילה. בעזרה יש דוגמאות ספציפיות לשליחה וקבלה של מבני נתונים שונים. EnJoy@
פורסם 2007 בינואר 918 שנים מחבר שניסיתי לעבוד פעם אחרונה עם mex הבנתי שביטלו את זה (בגירסא 7 ומעלה), משום ששיפרו את זמן הריצה משמעותית בריצת מטלב (משהו עם JIT- Just In Time)בכל מקרה, אני אשמח לאיזה קובץ DLL קטן, או הסבר קצר עליו.
פורסם 2007 בינואר 918 שנים לא ביטלו את זה פשוט הקובצ לא נשמר כ- DLL אלא .mex$$$ שאפשר להשתמש בו רק ב- MATLAB. גם אני די חדש בנושא (שבועיים) אבל כבר הוצאתי שתי פונקציות שעובדות. כל פונקציה ב- C/C++ שאתה רוצה להריץ ב- MATLAB צריך פשוט לכתוב פונקצית MAIN מיוחדת בשם void mexFunction. הדוגמא הגנרית הראשונה של MATLAB למשל: /* * ============================================================= * timestwo.c - example found in API guide * * Computational function that takes a scalar and doubles it. * * This is a MEX-file for MATLAB. * Copyright © 1984-2000 The MathWorks, Inc. * ============================================================= */ /* $Revision: 1.1.4.15 $ */ #include "mex.h" void timestwo(double y[], double x[]) { y[0] = 2.0*x[0]; } void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { double *x, *y; int mrows, ncols; /* Check for proper number of arguments. */ if (nrhs != 1) { mexErrMsgTxt("One input required."); } else if (nlhs > 1) { mexErrMsgTxt("Too many output arguments"); } /* The input must be a noncomplex scalar double.*/ mrows = mxGetM(prhs[0]); ncols = mxGetN(prhs[0]); if (!mxIsDouble(prhs[0]) || mxIsComplex(prhs[0]) || !(mrows == 1 && ncols == 1)) { mexErrMsgTxt("Input must be a noncomplex scalar double."); } /* Create matrix for the return argument. */ plhs[0] = mxCreateDoubleMatrix(mrows,ncols, mxREAL); /* Assign pointers to each input and output. */ x = mxGetPr(prhs[0]); y = mxGetPr(plhs[0]); /* Call the timestwo subroutine. */ timestwo(y,x); } פשוט תכנס לעזרה ותחיל לתרגל.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.