1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > VC调用MATLAB 产生的dll文件

VC调用MATLAB 产生的dll文件

时间:2020-03-08 20:40:36

相关推荐

VC调用MATLAB 产生的dll文件

1.当然是先建立matlab的m文件。

我在matlab中定义了一个函数,其m文件如下:

function re=add(C)

N=73;alpha=(0.2)*(pi/2);

Ts=sqrt(2*pi/N); t=-(N-1)/2:(N-1)/2; t=t'; t=t*Ts;

variance=pi; hh=zeros(N); hh(:,1)=1; hh(:,2)=2*t;

for k=3:N;%k阶数

hh(:,k)=hh(:,k-1).*t*2-2*(k-2)*hh(:,k-2); %计算n阶hermite函数的表达式,t自变量

end

HH(:,1)=1/sqrt(sqrt(variance))*hh(:,1).*exp(-t.*t/2);

for k=2:N;

HH(:,k)=exp(-t.*t/2).*hh(:,k)/sqrt(2.^(k-1)* factorial(k-1)*sqrt(variance));

end

if mod(N,2)==1;

W=0:N-1; k=exp(-i*alpha*W/1.6); D=diag(k);

else

W=0:N-2; W=cat(2,W,[N]); k=exp(-i*alpha*W/1.6); D=diag(k);

end

FF=Ts*HH*D*HH';

Z=C';

X=FF*Z;

re=real(X);

end

保存为add.m

2.下面来对matlab编译环境进行设置。打开matlab,在命令行状态下键入:

mex-setup

然后出现如下提示:

Select a compiler:

[1] Borland C++Builder version 5.0 in C:\Program Files\Borland

[2] Lcc C version 2.4 in F:\SOFT\SHARE\MATLAB65\sys\lcc

[3] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio

[0] None

Compiler:

这里我们选择’3’。(如果使用其他的编译器比如BCB,那么就可以相应的选择’1’)

然后,继续在命令行状态下输入:

mbuild –setup

Please choose your compiler for building standalone MATLAB applications:

Would you like mbuild to locate installed compilers [y]/n? y

Select a compiler:

[1] Borland C++Builder version 5.0 in C:\Program Files\Borland

[2] Lcc C version 2.4 in F:\SOFT\SHARE\MATLAB65\sys\lcc

[3] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio

[0] None

Compiler:

这里需要几步确认。大家按情况操作即可。

3.对VC的编译器环境进行设置。在Tools-options-directory里面设置include和lib的路径,分别添加一项,指向matlab安装目录中的\extern\include和\extern\lib\win32\digital\df50\

(我这里用的是matlab6.5,安装目录为C:\MATLAB6p5,版本或安装路径不一样的请自行修改)

4.这一步比较关键。在这一步中,将matlab中的.m文件转换为dll。

在matlab命令行中输入:

mcc -t -h -L C -W lib:ppp -T link:lib add.m

其中add.m就是你刚才保存的m文件名字,ppp是要生成的链接库的文件名,随便起的

至此,可以发现在add.m所在的目录中产生了一大堆文件。我们只用其中3个:

ppp.hppp.libppp.dll

5.新建一个VC工程。将上面这3个文件拷贝到VC工程所在的目录中,以便VC调用之。

6.进行VC编程。

首先,在cpp文件中加入:#include“ppp.h”

然后,设置VC的链接库。在project-settings-link下的object/library modules中加入:

ppp.lib libmx.lib libmatlb.lib libmmfile.lib()

至此,VC的编译环境设置完毕。下面就是编程部分了。

7.编程部分的关键:接口和数据类型的转换

先给出VC实现的源代码:

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

/*

Description: 一维FRFT变换,

param:t为输入的数组

dimension维数

Note:DO NOT forget to release the memory of "t"

*/

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

void CTestmatlabDoc::FRFT1D(double *t,int dimension)

{

if(dimension%2 == 0)

{

AfxMessageBox("不是奇数");

return;

}

double * md = NULL;

DWORD begintime = timeGetTime();

//调用matlab创建2个矩阵

mxArray *A=mclGetUninitializedArray();

mxArray *C=mclGetUninitializedArray();

//将C语言中的变量值赋给matlab中的矩阵

mlfAssign(&A,mlfDoubleMatrix(1,dimension,t,NULL));

mlfAssign(&C,mlfAdd(A));

//将matlab中的矩阵的指针传递给C语言中的指向double的指针

md=mxGetPr(C);

memcpy(t,md,dimension*sizeof(double));

//释放这些矩阵

mxDestroyArray(A);

mxDestroyArray(C);

}

相信看到里面的注释,我们就明白的差不多了。

大家可以看出来,在进行调用的时候,我们使用的是m文件的文件名add生成的函数mlfAdd,而不是m文件中定义的add

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。