用VS2005(2008也同样)调用MATLAB2010的m文件函数

5 篇文章 0 订阅

关于vs2008(2005)与matlab的其他的混合编程请看网摘,此处仅仅转载vc++怎么调用matlab自定义函数(即自己写的m文件函数)

 

http://blog.sina.com.cn/s/blog_5fd4166b0100pmk9.html

 一定要按如下配置好,特别注意的是第一步。否则不能初始化程序,而且所有矩阵相关操作不能进行内存分配

 

1. matlab:mex -setup 选择vs2005
mbuild -setup 选择vs2005

2. 写matlab函数:
例如:function m=mypascal(n)  
m=pascal(n);
m=m';
保存为:test.m

3. 将matlab函数转为VC++可调用的库函数:
 mcc -W lib:libtest -T link:lib test.m 
其中,libtest为生成文件的名字,test.m为要转换的m文件

—————————————————————————————————————————————————

4. VS2005配置:Tools->Options->Projects and Solutions->VC++ Directions
Include Files中添加:...\MATLAB\R2010b\extern\include
lib Files中添加:...s\MATLAB\R2010b\extern\lib\win32\microsoft

5.新建VS2005工程,将第3步生成的.h .lib .dll文件拷到该工程目录中,并添加如下配置:
#include "libtest.h"
linker->Input->Additional Dependencies: libtest.lib mclmcrrt.lib

6.调用
① 初始化:if (!mclInitializeApplication(NULL,0))    
   {
//AfxMessageBox("不能初始化程序");
   }    

if (!libtestInitialize()) 
   {
//AfxMessageBox("不能初始化连接库");
   }
②调用:double data;
data=double(m_size);mxArray *size; //输入参数m_size可以是任意正整数
mxArray *out=NULL; //输出参数

//创建mxArray数据对象,双精度标量
size=mxCreateDoubleScalar(data);

//内存复制赋值
memcpy(mxGetPr(size), &data, 1*sizeof(double));        

mlfTest(1, &out, size);//函数调用 [第一个参数表示输出参数的个数这里有一个]

       CString strtext;

       for (i=0;i<m_size;i++)     
    for(j=0;j<m_size;j++)           
    {
strtext.Format("%.f", *(mxGetPr(out)+i*m_size+j));
cout << strtext <     }     

③终止:libtestTerminate();//终止进程   
mclTerminateApplication();//终止MCR

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值