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

来源:互联网 发布:智能小车惯性导航算法 编辑:程序博客网 时间:2024/06/06 00:19

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、运行结果

   

0 0
原创粉丝点击