來自:http://sxnuwhui.blog.163.com/blog/static/13706837320124282524436/
先保存一個“Matlab更改啓動目錄”的小技巧:在目錄:$MATLAB\R2010a\toolbox\local下新建startup.m文件,例如,在文件中輸入:cd E:\Experiment\code
資料1:http://anony3721.blog.163.com/blog/static/51197420111145534021/
資料2:http://shijuanfeng.blogbus.com/logs/106781870.html
資料3:http://blog.csdn.net/xiazhaoqiang/article/details/6292138
這裏我分四個步驟講解一個簡單的開發過程,使用的Matlab版本爲Matlab R2008a,VC版本爲Visual C++ 2008 Express版本。
步驟一、新建一個空的dll程序
步驟二、爲matlab函數提供頭文件和靜態庫的支持
要讓衆多的Matlab接口函數能夠運行起來,就必須給它們提供頭文件和靜態庫的支持,爲了避免每個項目都做這些添加工作,我們可以在Tools|Options|VC++ Directories下將頭文件和靜態庫的目錄添加進去,如圖:
在Include files中添加”$matlab dir\extern\include”和”$matlab dir\extern\include\win32”,在Library files中添加”$matlab dir\extern\lib\win32\microsoft”。
在項目屬性中,讓鏈接器鏈接libmx.lib、libmat.lib和libmex.lib,如圖:
在Preprocessor Definitions中添加MATLAB_MEX_FILE的宏定義。在Project|xx Project Properties|C/C++|Preprocessor中設置,如下圖:
現在寫一個hello world程序就可以編譯通過,如:
第三步 利用def文件導出mexFunction函數
讓函數從DLL中的導出有兩種方法,__declspec(dllexport)命令導出和def文件導出,但由於需要導出mexFunction在”mex.h”中已經定義,所以前一種導出方法行不通,這裏採用def文件導出。
首先告訴編譯器我使用了xx.def文件,在Project|xx Project Properties|linker|input|Module Definition File中填上xx.def。
再編寫xx.def的內容,只需兩句話:
LIBRARY xx
EXPORTS mexFunction
這裏的xx指的是模塊名稱(我用的是我新建的項目名稱),並將def文件添加到你的工程中。
最後,將輸出文件的後綴名改爲mexw32。在Project|xx Project Properties|linker|General|Output File中,如圖:
再次編譯、生成,可以在生出目錄mexw32文件。可以用dumpbin工具查看mexw32文件,可以看到有函數mexFunction已經導出。到這個時候DLL開發已經完成。下一步:
第四步、在啓動調試時關聯matlab
在Project|xx Project Properties|Debugging|Command裏添加Matlab的啓動地址:”$matlab dir\bin\win32\MATLAB.exe”。如圖:
最後設定斷點,啓動調試,Matlab會自動啓動,運行編寫的DLL(mexw32)文件,就會觸發斷點,如:
當然,最終使用的mexw32文件還應該是Release版本的,這樣的話,上面談的部分設置還需要在Release版本中重新來過。