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.h    ppp.lib     ppp.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

VC调用MATLAB 产生的dll文件相关推荐

  1. matlab生成的dll初始化失败,VC调用Matlab编译的DLL,老初始化失败

    我用的是VC6与Matlab2011A 装饰Matlab代码编译成DLL文件老失败,搞了好久没找到原因,请教各位! 以下是网上的算例,照着做了,就是不能初始化DLL. 发表于: 2007-10-18 ...

  2. vc调用matlab生成的dll实例

    http://blog.csdn.net/ithzhang/article/details/7444563 转载于:https://www.cnblogs.com/burellow/archive/2 ...

  3. vc调用matlab生成的C++dll库总结。

    实验室的一个项目需要调用matlab程序.经过再三考虑,决定使用vc调用matlab导出库的形式.而我主要负责与matlab程序结合的工作.以下是今天工作的简要总结.全当是个备忘吧. 1:在matla ...

  4. vs2008中调用matlab生成的dll

    vs2008中调用matlab生成的dll matlab版本为:matlab7.11.0(R2010b) vs2008 1.在matlab中生成dll 在m文件中实现如下功能: 获得N个魔方矩阵的秩. ...

  5. c#调用matlab生成的dll

    c#调用matlab生成的dll,这个过程分为三步: 1.编写matlab代码 2.将.m文件编译成dll 3.在C#代码里调用dll 打算实现的功能: 求x*y的二维数组的均方差 一.编写matla ...

  6. vc只能调用matlab子函数,VC调用matlab函数

    最近在学习matlab,先试一个VC调用matlab函数的简单例子 用的是VC++6.0,matlab7.8也就是matlabR2009 首先在matlab下设置环境 >> mbuild ...

  7. VC调用matlab中定义的.m文件中的函数的实例

    Matlab是一个强大的数学计算/仿真工具,其内置了很多实用的现成的函数,而且我们经常也自己定义很多m函数.但在很多情况下,我们不得不使用VC编程.那么,如何在VC中利用matlab的资源呢?在这里我 ...

  8. 使用VS2010调用matlab的mat格式文件

    做实验需要将matlab实现的meanshift的结果中的region的Iabels矩阵,需要把labels.mat读入VS2010中,实现功能,在此把实现过程记录下来. C++读取mat文件的步骤如 ...

  9. VC调用C#写的DLL

    From: http://hi.baidu.com/ocnc/blog/item/2c7fc45c1d1f1051fbf2c0ea.html VC中调用C#写的DLL时,对C#这边的DLL有要求,即要 ...

最新文章

  1. GitHub发福利:30多万元资源,学生可以免费用
  2. Swift中的延迟加载(懒加载)
  3. Spring好处—总结
  4. MongoDB数据库基础教程(一) - 下载与安装
  5. 计算机室教学控制软件,管鲍多媒体电子教室 电脑教学软件 广播教学软件 机房控制软件...
  6. 惠普打印机没有扫描问题解决
  7. 如何打开.json文件
  8. arduino驱动步进电机 附代码
  9. linux下看学校的IPTV
  10. JavaScript 中 List转Tree,Tree转List
  11. 51单片机温度传感器DS18B20
  12. 路由-策略Policy(路由重分发、路由过滤、路由策略)
  13. Java实现 谁不爱打牌
  14. 最全的软件测试面试题(含答案)
  15. 通过本地客户端连接GoogleCloud的Linux虚拟机
  16. MOSFET管经典驱动电路设计大全
  17. 美团2016招聘笔试:奇数位丢弃
  18. 2.Python数据基本运算
  19. 转:数据库访问性能优化
  20. Linux权限相关问题

热门文章

  1. 全国彩礼地图分析,江西福建等地彩礼均30万以上
  2. Openflow协议详解
  3. 让react支持ie11
  4. Android 系统(52)---O1关机闹钟
  5. Element el-date-picker 日期选择器详解
  6. Python浮点数数组求和结果不精确问题
  7. R语言使用rnorm函数生成正太分布数据、使用qqnorm函数绘制QQ图、如果向量为正态分布则数据点基本在一条直线上
  8. PHP常见的输出语句
  9. 发现TCP的一种错误----客户端连接失败(10055错误号)
  10. 在AWS上配置深度学习主机