VC调用MATLAB
最近项目要用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的更多相关文章
- VS2008 C++ 调用MATLAB 2009b 生成的DLL .
转载: 刚开始学习用VC++调用matlab生成的DLL,找了网上一些资料,难以找到vs2008与MATLAB2009b版本的,按照以往版本做的总是有很多错误.经过两天努力,终于调试成功,这里将经验总 ...
- VC 与Matlab混合编程之引擎操作详解
Visual C++ 是当前主流的应用程序开发环境之一,开发环境强大,开发的程序执行速度快.但在科学计算方面函数库显得不够丰富.读取.显示数据图形不方便. Matlab 是一款将数值分析.矩阵计算.信 ...
- VC和matlab混合开发学习
作者:朱金灿 来源:http://blog.csdn.net/clever101 第一种方式是直接调用Matlab Engine的接口.Matlab Engine 采用Client/Server的方式 ...
- VC 编译 MATLAB 的 mex 文件
VC 编译 MATLAB 的 mex 文件mex 文件是 MATLAB 调用其他程序设计语言程序或算法的接口.在 Windows 环境中,mex 文件是扩展文件名为 DLL 的动态链接库,可以在 m ...
- C/C++程序通过动态链接库调用MATLAB程序
C/C++程序通过动态链接库调用MATLAB程序 1 MATLAB编译器设置 需要设定对应的C++编译器才能编译.m文件生成可供C++调用的库文件. 在MATLAB命令行输入:mex –setup:然 ...
- c++调用matlab生成的Dll动态连接库
点击打开链接http://download.csdn.net/detail/nuptboyzhb/4228429 c++调用matlab生成的Dll动态连接库 实验平台: matlab 7.0(R ...
- C/C++下调用matlab函数操作说明
1.matlab的安装 连接:http://pan.baidu.com/s/1qXuF7aO 安装32位版本的matlab(在目录下bin文件夹中有两个文件夹,选择win32文件夹下的setup进行安 ...
- vs 2010调用matlab dll显示窗口核心代码
matlab代码: figure('NumberTitle','off','menubar','none','toolbar','none','name','Topo Image'); x=0:pi/ ...
- C++调用matlab函数
C++与matlab混合编程——C++调用MATLAB函数 笔者最近在从事一个MFC相关的项目,要求将用Matlab实现的算法通过应用MFC制作成一个小应用.其中有一部分内容需要求一个多元函数的最值. ...
随机推荐
- java Socket Udp
接收端: package cn.itcast.net.p2.udp; import java.io.IOException;import java.net.DatagramPacket;import ...
- 防止线程退出的几种方案-不再while(true)
有时候 调试程序的时候 .我们需要防止程序退出.比如调试一个定时服务. 方法1 while(true) {Thread.Sleep(1000)} 方法 2——(推荐) Well when you do ...
- hdu1690Bus System--解题报告
题意:有一个公交系统的收费标准例如以下表: 然后问:给出 这些L1~4 & C1~4的值,然后 N个站.列出每一个站的X坐标.然后询问M次,问两个站台的最小花费 题解:那么这里非常明显是最短路 ...
- extends android.view.ViewGroup两种实现
/* private int measureHeight(int heightMeasureSpec) { int count = getChildCount(); ...
- HDUOJ---1867 A + B for you again
A + B for you again Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- 从零开始的 Python 爬虫速成指南
序 本文主要内容:以最短的时间写一个最简单的爬虫,可以抓取论坛的帖子标题和帖子内容. 本文受众:没写过爬虫的萌新. 入门 0.准备工作 需要准备的东西: Python.scrapy.一个IDE或者随便 ...
- PowerDesigner 12小技巧-pd小技巧-pd工具栏不见了-pd修改外键命名规则-pd添加外键
PowerDesigner 12小技巧-pd小技巧-pd工具栏不见了-pd修改外键命名规则-pd添加外键 1. 附加:工具栏不见了 调色板(Palette)快捷工具栏不见了PowerDesigner ...
- JMeter学习笔记--JMeter常用测试元件
JMeter测试计划有一个被称为“函数测试模式”的选项,如果被选择,它会使Jmeter记录来自服务器返回的每个取样的数据.如果你在测试监听器中选择一个文件,这个数据将被写入文件.如果你尝试一个较小的测 ...
- FA_会计中的折旧方式的种类(概念)
2014-06-08 Created By BaoXinjian
- Spring boot设置启动监听端口
一.通过配置 修改application.properties 在属性文件中添加server.port=8000 二.直接看代码: @Controller @EnableAutoConfigurati ...