matlab dll没有头文件,matlab调用dll没有头文件怎么办
2018-12-08 回答
基于dll形式vc調用matlab函數方法
如果在一matlab中或vc中寫好了函數的話,想在對方的環境中使用,直接將對方語言的函數編譯成dll是一個很方便的方法,不需要重寫了。今天把基于dll形式vc調用matlab函數的主要過程寫下,在后續將寫一下matlab調用vc函數的方法。
1,matlab中編譯dll
在matlab中寫好函數,保存在mttestfun.m中,使用mcc -w cpplib:mtlibtestfun -t link:lib mttestfun.m生成dll,用這個命令生成的是c++形式的,即matlab數據類型可以用類;否則用其他的命令生成的c形式的,不能用類。并生成了相應的其他mtlibtestfun.h,mtlibtestfun.lib和mtlibtestfun.dll在內的一些文件
2,vc中引用matlab環境
需要引用的.h文件路徑為matlab安裝目錄的extern\include,需要引用的.lib文件路徑為matlab安裝目錄的extern\lib\win32\microsoft;引入附加庫mclmcrrt.lib
3,vc中調用matlab函數
將剛才matlab編譯生成的文件全拷到當前vc工程下,只將mtlibtestfun.h文件加入到當前工程,并在需要調用的文件中包含;引入附加庫mtlibtestfun.lib。在vc初始化函數里用下面函數進行初始化
mclinitializeapplication(null,0);
mtlibtestfuninitialize();
在結束時用下面函數釋放
mtlibtestfunterminate();
mclterminateapplication();
下面在需要的地方調用,假設是下面的形式
mtlibtestfun(int nargout, mwarray& y, const mwarray& i, const mwarray& th);
nargout是返回參數個數,這里是1,后面y反演向量則是傳出參數,i和th則是傳入參數輻射值和切高。
c++數據傳入matlab函數時需要將其轉化成mwarray類型
double* pi = new double[row*column];
pl = ...
mwarray mwi(row, column, mxdouble_class);
mwi.setdata(pi, row*column);
返回后還需要將mwarray轉回c++類型數據
double* py = new double[yrow*ycolumn];
mwy.getdata(py, yrow*ycolumn);
當然,對于一維數組數據來說,這樣調用是沒有問題的,但是對于二維矩陣數據來說,上面的調用會發生數據傳入和傳出錯誤。因為c++與matlab數組存儲順序不一樣,matlab是列優先與c++中的行優先不同。這個數據的轉換也將在后續給出一些解決辦法。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的matlab dll没有头文件,matlab调用dll没有头文件怎么办的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机设备安全检查表,信息安全检查表
- 下一篇: matlab实现频域率滤波,基于Matl