如何用matlab调用VS15创建的.exe文件(C语言编写)
Step 1.编写C代码
- 主函数格式:int main(int argc, char *argv[])
- 若想从外部向main函数传递参数,该格式是固定的
- int argc 表示传入参数的个数
- char *argv[] 传入参数的内容,注意传入的是字符类型,使用时需要将字符串进行转换。
- 使用VS创建解决方案,生成.exe
#pragma warning(disable:4996)
#pragma once
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
int main(int argc, char *argv[])
{
int CAL1_statistics, CAL2_statistics, Find_ref_sig_statistics;
int sub_tdl_num, sub_tdl_length, tdl_length;
int system_period;
for (i = 0; i < argc; i++)
{
switch (i)
{
case 1:
system_period = atoi(argv[i]);
printf("[OUTPUT] The %d th input paramter system_period is %d!\n", i, system_period);
break;
case 2:
sub_tdl_num = atoi(argv[i]);
printf("[OUTPUT] The %d th input paramter sub_tdl_num is %d!\n", i, sub_tdl_num);
break;
case 3:
sub_tdl_length = atoi(argv[i]);
printf("[OUTPUT] The %d th input paramter sub_tdl_length is %d!\n", i, sub_tdl_length);
break;
case 4:
Find_ref_sig_statistics = atoi(argv[i]);
printf("[OUTPUT] The %d th input paramter Find_ref_sig_statistics is %d!\n", i, Find_ref_sig_statistics);
break;
case 5:
CAL1_statistics = atoi(argv[i]);
printf("[OUTPUT] The %d th input paramter CAL1_statistics is %d!\n", i, CAL1_statistics);
break;
case 6:
CAL2_statistics = atoi(argv[i]);
printf("[OUTPUT] The %d th input paramter CAL2_statistics is %d!\n", i, CAL2_statistics);
break;
default:
break;
}
//printf("[OUTPUT] The %d th input paramter is %s!\n", i,argv[i]);
}
return 0;
}
Step 2.matlab调用.exe
- system(command)等效于在windows命令行【调用"运行"(快捷键Ctrl+R)】里执行command
- 注意在传入参数的时候是以字符传入的,各个参数(字符)需要以空格分隔开
- 本例中,传入参数的个数为7,其中第1个参数(0 th)是Order_confirm.exe,没打印
clc;
clear;
system_period = 2500;
sub_tdl_num = 4;
sub_tdl_length = 95;
Find_ref_sig_statistics = 2000;
CAL1_statistics = 10000;
CAL2_statistics = 2000;
tic;
op = 'Order_confirm.exe ';
cmd = [op num2str(system_period) ' ' num2str(sub_tdl_num)...
' ' num2str(sub_tdl_length) ' ' num2str(Find_ref_sig_statistics)...
' ' num2str(CAL1_statistics) ' ' num2str(CAL2_statistics)];
system(cmd);
tim = toc;
fprintf('OC is done,spent %d ms\n',round(tim*1000));
- matlab窗口输出:
- 经实验,使用matlab传参至C产生的exe文件,实现相同功能执行效率大概是matlab的2倍
附录:C中字符串转数据的函数
函数 | 功能 |
---|---|
atof() | 将字符串转换为双精度浮点型值 |
atoi() | 将字符串转换为整型值 |
atol() | 将字符串转换为长整型值 |
strtod() | 将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字 |
strtol() | 将字符串转换为长整值,并报告不能被转换的所有剩余数字 |
strtoul() | 将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字 |
参考:
https://blog.csdn.net/Eastmount/article/details/20413773
https://download.csdn.net/download/qq_43445577/13081846