最近项目要用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. 3、eclipse 查看原始类出现The jar file rt.jar has no source attachment解决方法

    因为rt的source在jdk目录的src.zip文件里,将文件设置为jdk下的src.zip就行了.具体如下 Window>Preferences>Java>Installed J ...

  2. Intellij IDEA 快捷键整理(dyCopy)

    原文:http://www.cnblogs.com/tonycody/p/3257601.html   [常规] Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “! ...

  3. IDEA基于maven整合SSM

    感谢:IDEA搭建Spring+SpringMVC+mybatis框架教程 简洁明了, 步骤详细.

  4. BasicAuth和OAuth

    参考资料 百度百科BasicAuth 维基百科OAuth BasicAuth基本授权 BasicAuth又叫HttpAuth,它非常简单.例如你访问一个页面时,会弹出用户名密码框 它的优点是:简单,只 ...

  5. HDU 2256 Problem of Precision (矩阵乘法)

    Problem of Precision Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  6. Linux命令-终止进程命令:pkill

    killall是杀死所有进程,而pkill是按照进程名称杀死进程,可以达到杀死所有进程的目的,因为linux里面同名的进程是分主进程和子进程的. pkill - httpd 按名称强制杀死httpd进 ...

  7. Linux基础之常用命令篇

    一.命令的基本格式 [root@localhost~] root为用户名 -表示当前所在位置 localhost主机名 ‘#’超级用户 '$" 普通用户 命令的基本格式: 命令 [选项] [ ...

  8. python学习笔记——守护进程

    1 基本描述 守护进程:是系统中独立的后台服务进程, 特点:独立与终端并且周期性地执行某个任务,其生命周期长,一般随系统启动和终止. 缺点:进程的创建和销毁的时候需要消耗较多的计算机资源. 2 参考 ...

  9. Linux 分区注意事项

    必须分区: 1)/(根分区) 2)/swap(交换分区,当内存不超过4G时,建议swap大小为内存2倍,若超过4G,建议交换分区跟内存一样大) 推荐分区 /boot(启动分区,单独分区,最新200M)

  10. RHEL6.4 NFS文件共享服务器搭建

    服务端:192.168.56.16客户端:192.168.56.17 服务端安装配置1.安装软件包 # yum install rpcbind nfs-utils 2.配置开机自启动 # chkcon ...