讓我們從頭開始。 mexCallMATLAB
在MEX代碼中調用MATLAB函數,用戶定義的MATLAB函數或MEX文件。函數聲明是這樣的:
int mexCallMATLAB(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[],
const char *functionName);
詳細的參數是:
nlhs
:該MATLAB或MEX功能預計將產生輸出參數的總數。
*plhs[]
:指針數組,其中每個元素是一個指向一個輸出參數
nrhs
:總數的是,MATLAB或MEX功能預計需要在輸入參數
*prhs[]
:數組每個元素是指向輸入參數的指針的指針。
functionName
:包含函數名稱的C字符串。
注意到,*plhs[]
和*prhs[]
必須是一個指針數組來MEX型變量。這很重要,因爲這將用於瞭解接下來會發生什麼。使用上面的邏輯,看看調用mexCallMATLAB
您已經引用:
mexCallMATLAB(1,&new_number,1,&str,"input");
正如我們所看到的,在MATLAB中調用該函數是input
函數,它是一個MATLAB函數,其中輸入參數是在從用戶接收輸入並將其存儲到輸出變量中之前,用於在命令窗口中顯示的字符串提示。請注意,預期的是數字表達式,通常是數字或數字的一些操作。
的示例調用看起來就像這樣:
out = input('Enter a number: ');
Enter a number:
因而將顯示在命令窗口和任何號碼,你鍵入被存儲到變量out
。
當使用mexCallMATLAB
時,您正在做與上述操作相同的操作,但在MEX代碼中調用此操作。這個函數有一個輸入參數,並且有一個輸出參數是預期的。第二個參數在技術上是一個指向輸出參數的指針,其中這將只是一個元素的數組。因此,input
的輸出將存儲在將包含數字的變量new_number
中。str
變量是使用mxCreateString
創建的MEX字符串。您必須創建一個MEX字符串,因爲請記住,通過mexCallMATLAB
調用的函數的輸入變量的預期輸入必須是MEX變量。因此,str
是一個MEX字符串,而&str
將是一個指向MEX字符串的指針。這在技術上也是一個元素的指針數組。
一旦調用了這個函數,你就在MATLAB命令窗口中輸入一個輸入號碼,這樣號碼就被髮送回MEX並存儲到你的MEX代碼中的new_number
中。
這似乎是從MATLAB命令窗口獲取變量到MEX的一種優雅方式。我沒有遇到任何我在MEX經歷中看到的其他方法,所以請繼續使用它!