這裡指的是利用mcc由M檔案產生出來的C語言動態連結dll檔。產生出C++或其他語言的dll很狀況類似但細節很不同這裡不提。
首先說明重要特性:
1.這種M檔案轉出來的DLL必須要依賴MCR環境才能運行,而且需要對應正確的版本。
2.參數傳遞必須要用MATLAB的陣列結構,但是他沒有公開結構體,只提供API去建立、操作陣列結構,再從指標位置去取得或給定數值。
3.需要按照MATLAB設計的流程去初始化相關環境。流程後面再舉例說明。
4.有很多限制需要注意,比方說初始化只能一次,釋放/摧毀也只能一次。
5.初始化呼叫會卡住,需要等待。
流程:
1.先宣告變數。這是廢話,一般C語言都要先宣告才用。值得注意的是,需要宣告Matlab所設計的變數型態時,必須要引用他的.h檔案,或者去查看h檔案內容然後自己訂類似的。因為某h檔可能互相引用,且有先後順序,所以要用他的還是用自己重寫的請自行考慮。
2.先呼叫「mclInitializeApplication」函式。經過我測試,我猜測這個要成功才能去使用其他API。
3.可以呼叫MATLAB的C語言API去建立並操作mxArray,通常是把C語言的變數值塞到MATLAB陣列中。注意C++用的是mwArray,操作不一樣。
4.呼叫自製DLL內的初始化函式,可以查看.h檔案中的函式原型。通常會是<dll名稱>+Initialize。例如「libmatrix.dll」的就會有「libmatrixInitialize」。一定要先呼叫這個才能再呼叫自製函式。
5.呼叫自製DLL內的自製函式,通常有兩個,一個是mlf開頭,另一個是mlx開頭。兩個其實是同一個功能,但參數方式有點不同
,細節暫時不說。
6.可以呼叫MATLAB的C語言API去操作mxArray,通常是從MATLAB陣列取出數值存回C語言的變數中。注意C++用的是mwArray,操作不一樣。
7.可以呼叫MATLAB的C語言API去摧毀mxArray,通常陣列用過一次就要摧毀重新來,細節請看MATLAB範例。注意C++用的是mwArray,操作不一樣。
8.摧毀自製函式。
...有空再補完