C++ 调用 Matlab函数,混合编程

1、Matlab:

    mbuild -setup;

     mex -setup;选择相应的vs版本号

2、编写Matlab测试小程序:

  function [z] = MyAdd(x,y)
   z=x+y;
   end

3、Matlab 编译成dll之类的文件

     mcc -W cpplib:MyAdd -T link:lib MyAdd.m -C

(生成了

libMyAdd.dll
libMyAdd.h
libMyAdd.ctf
libMyAdd.lib

这四个是要用到的文件)

4、建立vs工程并把上述4个文件考到工程目录中,相应配置如下图所示:

\

5、测试程序:

#include "MyAdd.h"
int main(void)
{
 double a = 6;
 double b = 9;
 double c;
 // initialize lib,这里必须做初始化!
 if( !MyAddInitialize())
 {
  std::cout << "Could not initialize libMyAdd!" << std::endl;
  return -1;
 }
 // 为变量分配内存空间,可以查帮助mwArray
 mwArray mwA(1, 1, mxDOUBLE_CLASS); // 1,1表示矩阵的大小(所有maltab只有一种变量,就是矩阵,为了和Cpp变量接轨,设置成1*1的矩阵,mxDOUBLE_CLASS表示变量的精度)
 mwArray mwB(1, 1, mxDOUBLE_CLASS);
 mwArray mwC(1, 1, mxDOUBLE_CLASS);
 // set data,不用我解释了吧,很简单的,调用类里面的SetData函数给类赋值
 mwA.SetData(&a, 1);
 mwB.SetData(&b, 1);
 // using my add,掉我自己写的函数
 MyAdd(1, mwC, mwA, mwB);
 // get data,不用我解释了吧,很简单的,调用类里面的Get函数获取取函数返回值
 c = mwC.Get(1, 1);
 printf("c is %f\n", c);
 // 后面是一些终止调用的程序
 // terminate the lib
 MyAddTerminate();
 // terminate MCR
 mclTerminateApplication();
 return 0;

}

6、运行结果

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值