经历::在网上找了很多方法,都没有实现在matlab中调用vs的exe文件并且能够传递变量参数,一些小细节花费了自己很多时间,比喻忽略了一些空格!  网上很多的方法都是纯粹复制别人的方法,自己都没有去验证,所以在网上找答案时花了大量时间去看了一些重复而且并不正确的方法;

启示::在参考别人的方法时,一定要有自己的思考,上网搜答案一定要有选择性,最好找到一种权威、可信度比较高的机构写的方法,自己认真去验证一次,不行就放弃,不要反复去看一些重复的方法,兜着绕圈子,浪费大量时间!!!

问题解决:

在matlab中有多种命令来调用外部程序编译的exe文件:

1. 调用外部程序的命令
在matlab中执行一条外部系统命令的方法(不仅仅是Unix系的,windows也是一样的):
! command
比如说linux下
! ls
! mkdir test
更好的使用方法(这个方法也是适用于windows的):
system('command')
[status, results]=system('command')
[status, results]=system('command','-echo')
第一个直接在命令窗口中显示运行中的提示
第二个如果调用成功,status会返回0,如果失败返回其它值,在命令窗口是没有输出的,但是所有字符保存在results中
第三个和第二个一样,只是还强制在命令窗口中显示运行信息。
 
这个方法之所以更好,还有一个原因就是可以给命令传递字符变量。(调用system()可以传递字符变量,而用!command不能传递变量,只能传递常量);
 
举例说明system()调用exe文件:
 
1>、test.cpp文件
#include "stdafx.h"
#include<stdlib.h>
#include<iostream>
using namespace std;
 
/*char* r[] 字符指针数组 接受传递来的字符串,其中r[0]指针往往存储程序自身的名称,比喻:"test.exe",其它字符参数(程序中要用的参数)依次存储在r[1]  、r[2]......中*/
int main(int argc, char* r[])                                          
{
     char q=*r[1];
     int  a=1;
     int  b=2;
     int  c=a+b;
cout<<c<<q<<endl;
    return 0;
}
 
2>、test.exe文件
将test.cpp在vs中编译运行,生成test.exe文件;
 
3>、test.m文件 (在matlab中编写简单的test.m文件)
clear
clc
sym x;   //定义一个变量x,不用定义这一步也可以
x='w';
cmd=['path\test.exe' ' ' x]; //千万千万注意空格['path\test.exe' ' ' x];  译为 [‘path\test.exe'空格‘空格’空格x] ; 少一个空格都会出错
system(cmd,'-echo');         // 也可以这样写[status, result]=system(cmd,'-echo'); status用来存储程序调用的状态,成功调用为0,否则为1;result用来存储执行的结果;
                                       //system(['path\test.exe' ' ' x],'-echo'); 直接将cmd的值放在system()中也是一样的;
 
在matlab中运行test.m文件,就会调用test.exe 文件,并且将变量x的值'w'传递给text.exe, 在test.cpp中*r[1]的值就为w, 运行后在matlab的command windows中显示运行结果:3w; 至此,调用结束;
 
注意:test.exe文件路径名称 path中,不能带空格,否则matlab不能识别路径!!!!
 
2、如何将matlab的.m文件编译成.exe文件(在matlab2010b上实现的)
1>、在matlab中新建一个function文件,编写你所需要实现的函数文件保存为function.m,文件名称最好与函数名一致;
2>、在matlab的 command windows中输入: mcc  -m  function   按下回车键运行,运行结束就会生成function.exe文件
 
 
3、 系统路径(环境变量)
用getenv('PATH')命令可以获得当前的“系统路径”(可执行文件的搜索路径)。
 
在matlab中可以这样增加系统路径(本次matlab会话有效,重启失效):
path1 = getenv('PATH')             %获得系统路径的字符串
path1 = [path1 ':/usr/local/bin']   %字符串中加入自己要的路径
setenv('PATH', path1)                %设置系统路径
!echo $PATH                              %输出以查看之
 
要想每次使用matlab都有效,可以在matlab的启动脚本matlabroot/toolbox/local/startuprc.m中加入上面的代码。
 
当然你也可以自己在shell中改整个系统路径的PATH喽。
 
偶然又看到Linux下可以用下面这样调用系统命令,未研究,补充记下(http://www.zdh1909.com/html/matlab/17112.html):
if isunix
  unix(['epstopdf ',filename,'.eps']);              % 如果是 linux 系统的话,将 eps 图像转换为 pdf 图像
end
 
另外,执行系统命令时可能遇到Matlab自带的库不兼容外部程序的情况:
比如:$MARLAB/version/sys/os/glnx86/libgfortran.so.3: version `GFORTRAN 1.4' not found (required by exe_filename)
解决办法就是把系统的库链接过去:sudo ln -sf /usr/lib/i386-linux-gnu/libgfortran.so.3.0.0 $MATLAB/sys/os/glnx86/libgfortran.so.3
(参考:http://judsonsnotes.com/notes/index.php?option=com_content&view=article&id=611:matlab-running-external-programs&catid=57:programming&Itemid=81)
 
参考英文资料:
 
(以上内容部分来自http://blog.sina.com.cn/felonwan;
 
 

Matlab中调用VS编译的exe文件并传递变量 的方法的更多相关文章

  1. [转]C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件

    原文:http://www.crifan.com/csharp_call_explorer_to_open_destinate_folder_and_select_specific_file/ C#中 ...

  2. 在InstallShield中发布单一的Setup.exe文件

    原文:在InstallShield中发布单一的Setup.exe文件 InstallShield默认的Release模式下,生成了一个setup.exe文件,一个msi文件,以及一些其它的杂项文件. ...

  3. bat调用exe文件并且传递参数

    bat调用exe文件并且传递参数 bat调用exe,并且传递日期参数,代码: @echo off cd "E:\SublimeWorks\exe" start xyzj_shrjj ...

  4. MFC exe文件生成的图标更改方法

    MFC exe文件生成的图标更改方法 https://blog.csdn.net/txwtech/article/details/92980545

  5. PHP HTML混写,PHP中把大块HTML文本直接赋值给字符串变量的方法

    PHP HTML混写,PHP中把大块HTML文本直接赋值给字符串变量的方法 使用HEREDOC/NOWDOCHEREDOC和NOWDOC是PHP5.3开始支持的一种新特性,它允许在程序中使用一种自定义 ...

  6. (原)matlab中使用mex编译多个cpp文件

    以前一直是mex一个文件.刚才需要编译多个文件(如a.cpp调用b.cpp的函数,b.cpp调用c.cpp的函数).如果只是mex a.cpp,提示函数找不到函数. 突然想到mex c.cpp b.c ...

  7. ASP.NET、C#调用外部可执行exe文件--多种方案

    一. try { //方法一 //调用自己的exe传递参数 //Process proc = new Process(); //proc.StartInfo.FileName = @"D:\ ...

  8. Matlab中调用第三方Java代码

    搞了一天,才算搞定. 第一步:定位Matlab中Java环境的ext目录 新建一个M script文件,或者直接在Matlab的交互式命令行中输入: disp(java.lang.System.get ...

  9. MFC在一个工程中启动其他工程的exe文件

    说明:有的时候把两个工程合并,但是偷懒不想在工程中添加代码,所以想到了这个办法,仅限偷懒哈哈哈哈 方法:新建一个主程序,在主程序的界面中添加按钮,在按钮的程序代码中添加以下语句: void CMain ...

随机推荐

  1. OpenStack笔记

    *********virsh xml文件解读****************************** https://libvirt.org/format.html https://libvirt ...

  2. 压力测试+接口测试(工具jmeter)

      jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单.因 为jmeter是java开发的,所以运行的时候必须 ...

  3. 精确率、准确率、召回率和F1值

    当我们训练一个分类模型,总要有一些指标来衡量这个模型的优劣.一般可以用如题的指标来对预测数据做评估,同时对模型进行评估. 首先先理解一下混淆矩阵,混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用 ...

  4. 详解Oracle partition分区表

    随着表中行数的增多,管理和性能性能影响也将随之增加.备份将要花费更多时间,恢复也将 要花费更说的时间,对整个数据表的查询也将花费更多时间.通过把一个表中的行分为几个部分,可以减少大型表的管理和性能问题 ...

  5. 修改Anaconda3中jupyter的工作目录

    1.打开Anaconda Prompt,运行jupyter notebook --generate-config 2.找到当前用户下的.jupter文件夹,打开jupyter_notebook_con ...

  6. apache 与 php-fpm 几种处理方式

    目录 1.SetHandler 2.ProxyPassMatch 3.ProxyPass 1.SetHandler 在apache配置文件只部署一次 需要Apache 2.4.9以上才行 ip:por ...

  7. java面向对象编程(三)--this

    看一段代码:(Demo112.java),先了解为什么要使用this. /* this的必要性 */ public class Demo112{ public static void main(Str ...

  8. OLAP了解与OLAP引擎——Mondrian入门

    一.  OLAP的基本概念 OLAP(On-Line Analysis Processing)在线分析处理是一种共享多维信息的快速分析技术:OLAP利用多维数据库技术使用户从不同角度观察数据:OLAP ...

  9. 环境搭建、RF库

    一.Python27安装 1.双击安装python-2.7.13-64位.msi 2.检查python:cmd命令行→[python]→回车,出现如图所示,表示成功 可能出现:'python'不是内部 ...

  10. python基础--列表、元祖、字典、集合

    列表(List) 1.列表特点 列表是可变的!! list 是一种有序的序列,可以添加.删除其中的元素,并且可以通过下标(索引)访问 数据 2.简单的常用操作 A.通过下表访问元素 print(lis ...