?? mathtools596.txt
字號:
發信人: FangQ (木頭蟲子), 信區: MathTools
標 題: Matlab與C++接口與混合編程討論小結(七)
發信站: BBS 水木清華站 (Tue Nov 2 22:28:22 1999)
第二章、
第五節、用c編寫mex程序[五]
發信人: fasiondog (亂了), 信區: MathTools
標 題: 用c編寫mex程序 (part 5)
發信站: BBS 水木清華站 (Mon Apr 5 12:52:13 1999)
發信人: dodoo (虛懷), 信區: Programming
標 題: 用C編寫mex程序 [PART 5]
通過前面兩部分的介紹,大家對參數的輸入和輸出方法應該有了基本的了解。具備了這
些知識,就能夠滿足一般的編程需要了。但這些程序還有些小的缺陷,以前面介紹的re
由于前面的例程中沒有對輸入、輸出參數的數目及類型進行檢查,導致程序的容錯性很
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
double *inData;
double *outData;
int M,N;
int M,N;
//異常處理
//異常處理
if(nrhs!=1)
mexErrMsgTxt("USAGE: b=reverse(a)\n");
if(!mxIsDouble(prhs[0]))
mexErrMsgTxt("the Input Matrix must be double!\n");
inData=mxGetPr(prhs[0]);
M=mxGetM(prhs[0]);
N=mxGetN(prhs[0]);
plhs[0]=mxCreateDoubleMatrix(M,N,mxREAL);
outData=mxGetPr(plhs[0]);
for(i=0;i<M;i++)
for(i=0;i<M;i++)
for(j=0;j<N;j++)
outData[j*M+i =inData[(N-1-j)*M+i];
在上面的異常處理中,使用了兩個新的函數:mexErrMsgTxt和mxIsDouble。MexErrMsgT
xt在給出出錯提示的同時退出當前程序的運行。MxIsDouble則用于判斷mxArray中的數據
是否double類型。當然Matlab還提供了許多用于判斷其他數據類型的函數,這里不加詳
述。
需要說明的是,Matlab提供的API中,函數前綴有mex-和mx-兩種。帶mx-前綴的大多是對
mxArray數據進行操作的函數,如mxIsDouble,mxCreateDoubleMatrix等等。而帶mx前綴
的則大多是與Matlab環境進行交互的函數,如mexPrintf,mxErrMsgTxt等等。了解了這
一點,對在Apiref.pdf中查找所需的函數很有幫助。
至此為止,使用C編寫mex函數的基本過程已經介紹完了。下面會在介紹幾個非常有用的
函數調用。如果有足夠的時間,也許還會有一個更復雜一些的例程。
--
這 是 最 后 的 斗 爭
THIS IS THE FINAL CONFLICT
※ 來源:·BBS 水木清華站 bbs.net.tsinghua.edu.cn·[FROM: 202.115.15.64]
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -