最近项目要用VC调用MATLAB,今天闲来无事,在这里稍微总结了一下初级的用法,大家共同学习;

首先在MATLAB Command Window里输入mbuild -setup,一步步走

还有一个mex -setup;和上边类似,就不多说了;

写MATLAB函数:

function [sum,prod] = sumandcheng(p1,p2)
sum = p1+p2; % p1 与 p2 的和
prod = p1.*p2;
end

上边函数计算p1和p2的和与积,写它的目的为了测试VC和MATLAB相互传输数据;

在MATLAB串口输入:mcc -W cpplib:plotsintest -T link:lib sumandcheng.m;

等一会生成了plotsintest.lib,plotsintest.h,plotsintest.dll文件,后边要用,把他们拷到你的VC工程目录下;

function [outs] = stringout(inputs)

outs=inputs;
end

这个函数直接输出输入的参数,写它的目的为了测试VC和MATLAB相互传输字符串;

同上:mcc -W cpplib:stringtest -T link:lib stringout.m

生成那三个文件stringtest.lib,stringtest.h,stringtest.dll,同样拷到VC工程目录下;

二.VC6.0里设置

1. Project->setting->Link->Object/library modules:加入mclmcrrt.lib和用MATLAB生成的.lib文件;这里用了plotsintest.lib,stringtest.lib;

2.Tools->Options->Directories->Show directories for->include files加入MATLAB的安装路径,例如我D:\ProgramFiles\MATLAB\R2010a\extern\include;接着在Show directories for下的Library files加入D:\ProgramFiles\MATLAB\R2010a\extern\lib\win32\microsoft;

3.加入头文件#include "plotsintest.h",#include "stringtest.h";

4.以下是VC源代码

#include <string.h>
#include <stdlib.h>
#include "plotsintest.h"
#include "stringtest.h"
//***********************以下内容从网上COPY的,不过重加了一遍注释*************************//
void display(const double* data, const int r, const int c, const char* name);
int main()
{
if (! plotsintestInitialize() )
{
fprintf(stderr,"Could not initialize the library.\n");
exit(1);
}
double x[] = {1,2,3,4,5,6};//初始化输入序列x;
double y[] = {7,8,9,10,11,12};//初始化输入序列y
//因为MATLAB里生成dll文件时用的mcc -W cpplib:stringtest -T link:lib stringout.m
//所以输入参数必需为mwArray类型;;
mwArray X(2,3,mxDOUBLE_CLASS);//定义输入X;
mwArray Y(2,3,mxDOUBLE_CLASS);//定义输入Y;
X.SetData(x,6);//将x赋值给X;
Y.SetData(y,6);//将y赋值给Y;

mwArray SUM,PROD;//定义输出mwArray变量;
sumandcheng(2,SUM,PROD,X,Y) ;//2表示输出参数个数,紧接着为输出参数和输入参数
//定义输出VC++类型参数,
double *sum,*prod;
sum = new double[6];
prod = new double[6];
//取出mwArray型数据并赋值给VC++变量
SUM.GetData(sum,6);
PROD.GetData(prod,6);
//打印出来
display(sum,2,3,"SUM");
display(prod,2,3,"PROD");
delete sum;
delete prod;
plotsintestTerminate();
//***********************以下内容为自己写的*****************************//

stringtestInitialize();//看到没,生成的stringtest 加上Initialize,表示初始化;

char strintemp[15]="Hello,World";//定义字符串;
mwArray intstr(strintemp);//把字符串转换为mwArray类型;
mwArray outstr;//定义输出字符串;

stringout(1,outstr,intstr);//调用MATLAB函数,1表示输出一个变量,紧跟着是输出变量和输入变量;

mwString strouttemp=outstr.ToString();//将MATLAB函数输出的mwArray变量换为mwString类型;
char *c = strdup((const char *)strouttemp);//把mwString类型转换为char型;
printf("%s\n",c);
stringtestTerminate();//这个就不解释了吧!
return 0;
}

//当然底下这个子函数也是从网上荡来的和上边是一块的;
void display(const double* data, const int r, const int c, const char* name)
{
int i,j;
printf("%s = \n",name);
for(i=0;i<r;i++)
{
printf("\t");
for(j=0;j<c;j++)
printf("% 4.2f \t",data[j*r+i]);
printf("\n");
}
printf("\n");
}

VC调用MATLAB的更多相关文章

  1. VS2008 C++ 调用MATLAB 2009b 生成的DLL .

    转载: 刚开始学习用VC++调用matlab生成的DLL,找了网上一些资料,难以找到vs2008与MATLAB2009b版本的,按照以往版本做的总是有很多错误.经过两天努力,终于调试成功,这里将经验总 ...

  2. VC 与Matlab混合编程之引擎操作详解

    Visual C++ 是当前主流的应用程序开发环境之一,开发环境强大,开发的程序执行速度快.但在科学计算方面函数库显得不够丰富.读取.显示数据图形不方便. Matlab 是一款将数值分析.矩阵计算.信 ...

  3. VC和matlab混合开发学习

    作者:朱金灿 来源:http://blog.csdn.net/clever101 第一种方式是直接调用Matlab Engine的接口.Matlab Engine 采用Client/Server的方式 ...

  4. VC 编译 MATLAB 的 mex 文件

    VC 编译 MATLAB 的 mex 文件mex 文件是 MATLAB 调用其他程序设计语言程序或算法的接口.在 Windows 环境中,mex 文件是扩展文件名为 DLL 的动态链接库,可以在 m ...

  5. C/C++程序通过动态链接库调用MATLAB程序

    C/C++程序通过动态链接库调用MATLAB程序 1 MATLAB编译器设置 需要设定对应的C++编译器才能编译.m文件生成可供C++调用的库文件. 在MATLAB命令行输入:mex –setup:然 ...

  6. c++调用matlab生成的Dll动态连接库

    点击打开链接http://download.csdn.net/detail/nuptboyzhb/4228429 c++调用matlab生成的Dll动态连接库 实验平台:   matlab 7.0(R ...

  7. C/C++下调用matlab函数操作说明

    1.matlab的安装 连接:http://pan.baidu.com/s/1qXuF7aO 安装32位版本的matlab(在目录下bin文件夹中有两个文件夹,选择win32文件夹下的setup进行安 ...

  8. vs 2010调用matlab dll显示窗口核心代码

    matlab代码: figure('NumberTitle','off','menubar','none','toolbar','none','name','Topo Image'); x=0:pi/ ...

  9. C++调用matlab函数

    C++与matlab混合编程——C++调用MATLAB函数 笔者最近在从事一个MFC相关的项目,要求将用Matlab实现的算法通过应用MFC制作成一个小应用.其中有一部分内容需要求一个多元函数的最值. ...

随机推荐

  1. 类的专有方法(__getitem__和__setitem__)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #http://www.imooc.com/code/6252 #类的专有方法(__getitem__和__s ...

  2. php 5.3新特性

    1.命名空间 解决了类,函数和常量名冲突的问题 2.静态绑定 继承时父类可以直接调用子类重写父类的方法 class A { public static function who() { echo __ ...

  3. 雪球、牛股王这种股票类App 到底能否帮你赚到钱?

    核心观点 股民这个大群体,是需要区分对待的:其中包含一小部分有自己独立判断能力的投资者和一大群没有自己判断能力(尽管他们经常觉得自己有)的普通散户. 当前的互联网证券类App,确实很难保证帮股民赚到钱 ...

  4. JSON与Bean互转

    转自: 关于json与javaBean之间的转换 废话不多说,直接进入主题,json与javaBean之间的互相转换 javaBean转换成json 直接使用提供的方法可以得到json JSONObj ...

  5. HDUOJ-----(1329)Calling Extraterrestrial Intelligence Again

    Calling Extraterrestrial Intelligence Again Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: ...

  6. Oracle查询结果中:一列中相同的值或一列中重复的值,只显示一次

    http://www.itpub.net/thread-1768915-1-1.html 问题: CREATE TABLE test(ob_id VARCHAR(32),ob_name VARCHAR ...

  7. AP_付款方式汇总:标准付款、退款退货付款、撤销付款(概念)

    2014-06-04 Created By BaoXinjian

  8. 【转】对 Go 语言的综合评价

    以前写过一些对 Go 语言的负面评价.现在看来,虽然那些评价大部分属实,然而却由于言辞激烈,没有点明具体问题,难以让某些人信服.在经过几个月实际使用 Go 来构造网站之后,我觉得现在是时候对它作一些更 ...

  9. 局域网不同用户同时登录同一个网站,会出现session乱窜的问题

    出现这种问题的情景再现: 1.有一部分人访问网站会出现session乱窜的问题. 2.这部分人是在同一个局域网中. 3.不同菜单看到的信息是不同人的,或者同一个菜单翻页时有的时候看到的是自己的数据,有 ...

  10. 常用IP核

    前言 记录自己用到的模块,随时补充. 主要分类: 一.常用模块 1-FIFO FIFO分为两种,一是输入输出时钟相同(Common clock)的 fifo ;二是输入输出时钟不相同(Independ ...