VC6.0与matlab7.1混合编程的案例(下)

  
VC6.0matlab7.1混合编程的案例(下)

四、函数的调用和参数传递
分析:函数 function [r]=showsin(b,n) ;输入参数有 2 个为 b,n ,输出参数仅有 1 个为 r
1 、定义实参: mxArray *b=NULL,*n=NULL,*r=NULL;
2 、设计界面如下图所示:
3 、参数传入方法实例:
A 、建立一个矩阵,并赋值给 mxArray 变量: b=mxCreateDoubleMatrix(1,1,mxREAL);
B 、通过内存复制命名将,参数复制到定义的矩阵地址中:
memcpy(mxGetPr(b), &b1, sizeof (double)); // b1 的值传入
其中 mxGetPr 函数是用来获取 mxArray 变量的地址函数;
4 、参数的传出实例:
A 、定义一个 double 型的变量用来接收参数结果: double r1=0;
B
、再次利用内存复制命令将分析结果传复制出来:
   memcpy(&r1,mxGetPr(r),sizeof(double));
5 、函数的调用,这里要注意的一点是第一个参数的含义,第一个参数为整型数,定义的为返回参数的个数,本例中返回参数为 1 个所以设为 1 ,当设为 0 时是接收不到任何返回参数的,但不影响执行;返回参数必须用地址接收,也就是 mxArray 变量的指针的指针;
   例如: mlfShowsin(1,&r,b,n); // 执行画图函数
6 、主要事件代码如下;
//edit by:favory.peng
   #include  " stdafx.h "
#include 
" MAT7VC.h "
#include 
" MAT7VCDlg.h "
#include 
" mylib.h "

// 定义参数
mxArray  * b = NULL, * n = NULL, * r = NULL;

CMAT7VCDlg::CMAT7VCDlg(CWnd
*  pParent  /*=NULL*/ )
    : CDialog(CMAT7VCDlg::IDD, pParent)
{
    
//{{AFX_DATA_INIT(CMAT7VCDlg)
    m_b = -5.0;
    m_n 
= 5.0;
    m_r 
= _T("");
    
//}}AFX_DATA_INIT
    
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    mylibInitialize();  
//初始化库
}


void  CMAT7VCDlg::OnBtnrun() 
{
    
int out=1//定义返回参数的个数
    double b1=0,n1=0,r1=0;
    UpdateData(
true);
    b1
=m_b;
    n1
=m_n;
    b
=mxCreateDoubleMatrix(1,1,mxREAL);
    n
=mxCreateDoubleMatrix(1,1,mxREAL);
    memcpy(mxGetPr(b), 
&b1, sizeof (double));
    memcpy(mxGetPr(n), 
&n1, sizeof (double));
    mlfShowsin(out,
&r,b,n); //执行画图函数
    
//获取返回参数值
    memcpy(&r1,mxGetPr(r),sizeof(double));
    m_r.Format(
"%f",r1);
    UpdateData(
false);
}



void  CMAT7VCDlg::OnDestroy() 
{
    mylibTerminate(); 
//释放库资源
    CDialog::OnDestroy();    
}

7 、编译运行,在编译时可能与到 link 错误,请仔细检测上面的设置是否正确;并确认是否将将 mylib.h  mylib.lib  mylib.dll 加入到当前工程中;
效果如图:
 
五、程序发布和运行环境配置:
1 、拷贝 <MATLAB71_root>/toolbox/compiler/deploy/win32/MCRInstaller.exe 文件到目标机器上,点击执行安装,按提示信息进行安装;
 
2 、安装好 MCR 之后,将 <mcr_root>/v73/runtime/win32 加入到系统的环境变量 path 中去,还要将 <mcr_root>/v73/bin/win32 加入到系统的环境变量 path 中去;
 
3 、工程文件的可执行程序,使用的用户共享库 (DLL 文件, lib 文件不需要 ) ,共享库对应的 .ctf 文件。
<本文结束,By:Favory 2007-5-19>
【有什么问题希望一起交流探讨】
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值