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

本文介绍VC6.0与Matlab7.1混合编程的具体实现方法,包括函数调用、参数传递及运行环境配置等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  
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>
【有什么问题希望一起交流探讨】
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值