c++引用matlab类,matlab调用C++函数浅谈(一)
由于在下才疏学浅,在网上看各高手指南时亦觉云里雾里,遂决定一切说明从最基础说起,一是方便自己(记性奇差),二是方便似我的小白。以下部分是我从各网站论坛等摘抄、重组、改写过的,以求更加详实明朗,由于参考较多,便不一
一列举,相信在baidu前三页各位能够找到我所引用的内容。在这里,向前辈们致敬!
闲话少序。
首先,说最简单环境,我的是matlab2012a,vs2010。
其次,创建C++函数:若想将matlab中部分函数C++化,先在vs中新建一个cpp文件(注意,不是新建项目,否则#include
不对)。这个文件(我们管它叫mex文件)的名字就是将来在matlab中调用函数的名字,所以别随便起。这个文件是有一定格式的:
*一个C/C++的MEX源程序通常包括4个组成部分,其中前3个是必须包含的内容,第4个则根据所实现的功能灵活选用
*(1) #include “mex.h”;
*(2)MEX文件的入口函数mexFunction, MEX文件导出名必须为mexFunction函数;
*(3)mxArray;
*(4)API函数
这里,举个最简单的样例:
#include
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray
*prhs[])
{ mexPrintf("hello,world!/n");
}
以上,就是一个最简单的mex文件。关于mexFunction,可以认定是一个接口函数,有一定的规则:
nlhs:输出参数数目
plhs:指向输出参数的指针数组
nrhs:输入参数数目
prhs: 指向输入参数的指针数组
同样举个例子:
在matlab Command
Window(命令窗口)中调用时(当然是编译后,下一步讲),如:[a,b]=test(c,d,e),*prhs[0]=c
*prhs[1]=d
*prhs[2]=e,当函数返回时,将会把你放在plhs[0],plhs[1]里的地址赋给a和b,达到返回数据的目的。比如mex文件helloworld:
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray
*prhs[])
{
int i;
i=mxGetScalar(prhs[0]);
if(i==1)
mexPrintf("hello,world!\n");
else
mexPrintf("大家好!/n");
}
当在matlab写:helloworld(1)时,打印出“hello,world”;否则打印出“大家好!”
接着,在matlab中编译:首先在命令窗口(格式稍加改动,不影响参照):
>>mex -setup 有:
Welcome to mex -setup. This utility will help you set up
a default compiler. For a list of supported compilers, see
http://www.mathworks.com/support/compilers/R2012a/win32.html
Please choose your compiler for building MEX-files:
Would you like mex to locate installed compilers [y]/n?
输入:y 有:
Select a compiler:
[1] Lcc-win32 C 2.4.1 in E:\MATLAB~1\sys\lcc
[2] Microsoft Visual C++ 2010 in D:\vs2010
[0] None
Compiler:
输入:2 有:
Please verify your choices:
Compiler: Microsoft Visual C++ 2010
Location: D:\vs2010
Are these correct [y]/n?
输入:y 就行了。然后会出一堆别的东西,不用理它。
然后,敲下:
>>cd
D:\matlab试验田\matlab调C++\hello2 其中,cd后的一串是刚才mex文件所在的文件夹,即路径。
接着,敲下:
>>mex helloworld2.cpp
其中,mex后面就是mex文件的文件名,也就是C++函数,之后会生成helloworld2.mexw32(64位的会生成
.mexw64)文件,在matlab当前文件夹(Current
Folder中会有显示,相应的,在mex文件所在文件夹中也有体现)。
最后,在matlab中调用C++函数:像matlab中调用普通函数即可。比如第二步中:
>>[a,b]=test(c,d,e)
(test就是C++函数,用就行了),比如:
>>helloworld2 就会直接显示:hello
world!
至此,最简单的matlab调用C++函数告一段落。
c++引用matlab类,matlab调用C++函数浅谈(一)相关推荐
- python init函数可以外部调用么,如何从python类中调用外部函数
我试图收集通过套接字解析的数据.这是我的密码:import pickle import SocketServer class SocketReciever(SocketServer.BaseReque ...
- python 类函数调用外部函数_python类中调用外部函数,python 函数中 定义类
Q1:python函数里的数组如何在函数外调用出来 使用返回值的方法有两种: 可以直接把调用的函数作为变量使用 可以用调用函数给一个变量赋值 第一种情况见如下例子: l = [1,2,3,4,5] d ...
- matlab泊松分布随机数和图像_浅谈可靠性理论中的常用概率分布
浅谈可靠性理论中的常用概率分布 1. 泊松分布 基本原理 泊松分布是最常见的离散概率分布,适合描述单位时间内随机事件发生的概率. (1) 泊松分布概率密度(不可靠度)计算公式 MATLAB概率密度函数 ...
- Javascript变量函数浅谈
一.变量 在javascript变量中可以存放两种类型的值:原始值和引用值. 原始值存储在栈上的简单字段,也就是值直接存储在变量所标示的位置内. 引用值存储在堆内的对象,栈内变量保存的是指向堆内对象的 ...
- python类构造方法缺省_浅谈python3 构造函数和析构函数
要点: 1.魔法方法,被__双下划线所包围 在适当的时候自动被调用 2.在创建一个对象的时候,一定会调用构造函数 3. del析构函数,在del a对象的时候,并一定会调用该析构函数 只有当该对象的引 ...
- Linux系统常用函数,浅谈linux下的一些常用函数的总结(必看篇)
1.exit()函数 exit(int n) 其实就是直接退出程序, 因为默认的标准程序入口为int main(int argc, char** argv),返回值是int型的. 一般在shell下 ...
- java什么是适配器类?作用是什么?_浅谈Java适配器模式
假期刚结束不久,也没什么好写的,今天就水下文章,讲讲设计模式对开发时的影响,做开发到现在,感觉设计模式对开发的影响还是挺大的. 这次就简单谈谈适配器模式.可能适配器模式感觉比较鸡肋,但是用到的地方还挺 ...
- python 调用 .netcore api_浅谈Python调用XBee的API来进行通讯
浅谈Python调用XBee的API来进行通讯 用python编程来控制串口(COM口),来让一对XBee进行通讯.不需要借助终端来发送和接收数据,增大了XBee使用的灵活性.这才是使用XBee模块的 ...
- java基类能调用虚函数_如果我要重写基类的虚函数,可以调用它吗?
MYYA 是,class Bar : public Foo{ ... void printStuff() { Foo::printStuff(); }};它与su ...
最新文章
- c语言logout_C++ 格式化日志输出实现代码
- 北京大学深圳研究生院计算机学什么,2018年北京大学深圳研究生院408计算机学科专业基础综合之计算机操作系统考研核心题库...
- X264 输出的统计值的含义(X264 Stats Output)
- linux内核sysfs详解【转】
- 2020年美赛C题(数据分析题)O奖论文笔记 (1)
- 深度学习笔记其一:基础知识和PYTORCH
- FLASH和EEPROM的最大区别
- leapftp连接不上,为什么leapftp连接不上
- python-decouple简介
- visio2003中、origin中、matlab中,字体的大小以pt为单位,与word中的几号字大小是如何对应?
- 电大计算机绘图本任务检测,(更新版)国家开放大学电大《计算机绘图》网考形考作业试题及答案-20210724215340.pdf-原创力文档...
- 人社部通知!2020年社保基数大调整、公积金必须同时缴纳、医保账户取消…
- startwith的使用方法
- 淘宝新店被人举报盗图要扣分处理办法
- Docker 容器技术(史上最强总结)
- 指数增强策略(股票)
- 2015_BOE_Chiu2 杜克大学oct数据集
- 命令反查dns,命令ip地址dns反查
- nrf51822蓝牙学习笔记一
- 智能手机屏幕常用单位浅析