最近项目要用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. hmac库 密钥相关的哈希运算消息认证码

    # -*- coding: cp936 -*- #xiaodeng #python 2.7.10 #HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一 ...

  2. Redis学习(5)-Jedis(Java操作redis数据库技术)

    Java连接redis 一,导入jar包 Redis有什么命令,Jedis就有什么方法 设置防火墙 在Linux上面运行如下代码: 单实例:Jedis实例: package com.jedis.dem ...

  3. mysql 设置密码

    法一: 格式:mysqladmin -u用户名 -p旧密码 password 新密码 方法二:1.用root 进入mysql后mysql>set password =password('你的密码 ...

  4. SSO之CAS + LDAP

    本来主要详细是介绍CAS和LDAP整合实现单点登录的步骤. 1. 依<SSO之安装CAS Server>所述安装好CAS Server.2. 安装ApacheDS.安装好ApacheDS后 ...

  5. 设置Linux-Centos6.5字符集

    登录腾讯云的服务,发现不支持中文字符.草蛋疼....  01.查看Linux当前语言 echo $LANG C    #C代表英文环境 ASCII 编码格式,通杀很多问题(乱码) 02.查看系统支持的 ...

  6. Eclipse集成ijkplayer并实现本地和网络视频播放等

    概述 Eclipse 集成ijkplayer demo,播放本地视频.和rtmp流. 详细 代码下载:http://www.demodashi.com/demo/10630.html 原文地址:Ecl ...

  7. 小程序九:导航&地图&画布

    navigator 导航 属性名 类型 默认值 说明 url String   应用内的跳转链接 redirect Boolean false 是否关闭当前页面 hover-class String ...

  8. PHP实现以UTF8格式截取指定字符串位数

    PHP代码: /* UTF8格式截取字符串,并且指定截取位数 */ function cut_string($string="",$num=20){ if(mb_strlen($s ...

  9. Nginx中的安全配置

    1.测试环境 操作系统:CentOS6.5 Web服务器:Nginx1.4.6 Php版本:Php5.4.26 2.Nginx介绍 1.nginx本身不能处理PHP,它只是个web服务器,当接收到请求 ...

  10. hdu1695 容斥原理 莫比乌斯反演

    给定两个数b,d,问[1,b]和[1,d]区间上有多少对互质的数.(x,y)和(y,x)算一个. 对于[1,b]部分,用欧拉函数直接求.对于大于b的部分,求n在[1,b]上有多少个互质的数,用容斥原理 ...