matlab怎么运用动态链接库,VC与Matlab混合编程之调用动态链接库dll(C++)

VC与Matlab混合编程之调用动态链接库dll—— 1、是先建立 matlab 的 m 文件。 ellipsefit.m 其包含:function [Xc,Yc,A,B,Phi,P]=ellipsefit(x,y) 2.MCC命令编译

VC与Matlab混合编程之调用动态链接库dll——

1、是先建立 matlab 的 m 文件。

ellipsefit.m

其包含:function [Xc,Yc,A,B,Phi,P]=ellipsefit(x,y)

2.MCC命令编译生成得到h、dll、lib等文件

在matlab命令行中输入:

mcc -W cpplib:ellipsefit ellipsefit.m -T link:lib (此方式为c++风格函数)

(具体命令含义可参考《精通matlab与C/C++混合程序设计》刘维,第3版,北京航空航天大学出版社。)

(ellipsefit是生成的lib文件名,可以随意命名。ellipsefit.m是想调用的.m文件名。

至此,可以发现在ellipsefit.m所在的目录生成了一系列文件。我们将要使用:ellipsefit.h, ellipsefit.dll, ellipsefit.lib

2.3:新建一个 VC 工程:test

为了简单,我们在这里建立一个win32控制台程序。如下:

然后,,将上面这3个文件(ellipsefit.h, ellipsefit.dll, ellipsefit.lib

)拷贝到VC工程所在的目录中,以便VC调用之,并将.h文件加入到工程中。

其中,ellipsefit.h中的function [Xc,Yc,A,B,Phi,P]=ellipsefit(x,y)对应的c++风格的函数接口是:

extern LIB_ellipsefit_CPP_API void MW_CALL_CONV ellipsefit(int nargout, mwArray& Xc, mwArray& Yc, mwArray& A, mwArray& B, mwArray& Phi, mwArray& P, const mwArray& x, const mwArray& y);

即在自己的主程序中调用该接口即可,c++中使用mwArray矩阵进行数据操作

2.3 VC 编程:(代码如下 )

/********************************

VC调用?mcc产¨生¨的?dll

************************************/

;

bool readFile(vector &vec_in, ifstream &infile)

{

double temp;

while(infile>>temp)

vec_in.push_back(temp);

return true;

}

bool ellipsefit_dll(double &Xc,double &Yc,double &A,double &B,double &Phi,double &P,vector x,vector y)

{

mwArray mwa_x(x.size(),1 , mxDOUBLE_CLASS), mwa_y(y.size(),1 , mxDOUBLE_CLASS);

mwa_x.SetData(&x[0],x.size());

mwa_y.SetData(&y[0],y.size());

mwArray mwa_Xc(1,1,mxDOUBLE_CLASS),mwa_Yc(1,1,mxDOUBLE_CLASS),mwa_A(1,1,mxDOUBLE_CLASS),mwa_B(1,1,mxDOUBLE_CLASS),

mwa_Phi(1,1,mxDOUBLE_CLASS),mwa_P(1,1,mxDOUBLE_CLASS);

ellipsefit(6,mwa_Xc,mwa_Yc,mwa_A,mwa_B,mwa_Phi,mwa_P,mwa_x, mwa_y);

Xc=mwa_Xc(1,1);

Yc=mwa_Yc(1,1);

A=mwa_A(1,1);

B=mwa_B(1,1);

Phi=mwa_Phi(1,1);

P=mwa_P(1,1);

return true;

}

int main(int argc, _TCHAR* argv[])

{

if (!mclInitializeApplication(NULL, 0))

{

cout << "Could not initialize the application."<< endl;;

}

if (!ellipsefitInitialize())

{

cout << "Can't Initalize!" << endl;

}

cout << "开a始?运?行D" << endl;

ifstream infile_x,infile_y;

char *infile_name_x="x.txt";

char *infile_name_y="y.txt";

infile_x.open(infile_name_x);

vector vec_x;

readFile(vec_x,infile_x);

infile_y.open(infile_name_y);

vector vec_y;

readFile(vec_y,infile_y);

double Xc,Yc,A,B,Phi,P;

ellipsefit_dll(Xc,Yc,A,B,Phi,P,vec_x,vec_y);

cout<

cout<

cout<

cout<

cout<

cout<

ellipsefitTerminate();

mclTerminateApplication();

system("pause");

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值