在matlab中调用c程序(32位与64位matlab)#(优选.)

更新时间:2023-09-04 05:33:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1.Maltab 编译Mex文件(不可调试)

(1)hello word

在matlab命令行中输入:mex -setup选择合适编译器,完成设置。

新建一个文件,输入:

#include <mex.h>

void mexFunction(int nlhs ,mxArray *plhs[] ,int nrhs, const mxArray *prhs[])

{

mexPrintf("Hello word!");

}

把上面程序保存为一个C文件,如hello.c

在command window下运行

>> mex hello.c

>>

结束之后在current folder 窗口里会有一个hello.mexw32文件。

在command window下运行

>> hello()

Hello word!

(2)如果是多维数组并不能用Arr[i][j]的格式寻址,在参数在C里只是一维数组,

一维数组按列排列,C语言是按行排列的,

如[a b c d;e f g h]C语言在内存中是按a b c d e f g h排列,而matlab是按 a e b f c g d h排列的。

如果要变成C语言可Arr[i][j]索引的格式,可用for循环转化

打印函数:

mexPrintf()相当于matlab的disp函数,

mexPrintf函数里需要打印的部分必须用""而不能用''

子函数的问题:

子函数有两种方式,一种采用return值得方式返回值

另一种方式为利用参数返回值,把需要return的值直接赋给形参。

多个.c文件的编译:

多个.c文件中只能存在一个mexFunction函数

可用mex ('a.c','b.c','d.c')的格式编译

2.在VS中调试mex

(1)在vs中建立dll工程,建立project.cpp文件,输入

#include "project.h"

#include <mex.h>

void mexFunction(int nlhs ,mxArray *plhs[] ,int nrhs, const mxArray *prhs[])

{

word.

mexPrintf("Hello word!");

}

建立.h文件,输入

#include "matrix.h"

#include "mex.h"

#define TESTMATLAB_EXPORTS

#ifdef TESTMATLAB_EXPORTS

#define MEX_FUNCTION_API __declspec(dllexport)

#else

#define MEX_FUNCTION_API __declspec(dllimport)

#endif

MEX_FUNCTION_API void mexFunction(int nlhs, mxArray* plhs[], int nrhs, mxArray* prhs[]);

建立project.def文件,输入

LIBRARY

EXPORTS

mexFunction

(2)添加include和lib路径

若matlab为32位,liblujing为:

D:\Program Files\MATLAB\R2014a\extern\lib\win32

64位则为:

D:\Program Files\MATLAB\R2014a\extern\lib\win64\microsoft

include路径为:D:\Program Files\MATLAB\R2014a\extern\include

(3)添加链接器附加依赖项libmx.lib libeng.lib libmat.lib libmex.lib,将连接器输出的文件名称后缀,project.dll改为project.mexw32,64位改为project.mexw64

(4)设置C/C++-代码生成-运行库为多线程调试(/Mtd)

(5)若为64位matlab,还需将vs的编译平台设置为x64

(6)生成解决方案,会在debug目录生成project.mexw64.

(7)打开matlab,将工作目录改到如上debug目录,包含project.mexw64文件

(8)开始调试,在vs中cpp文件设置端点,选择工具-附件到进程-matlab-添加,再在matlab中运行该文件,即可跳入端点处.

(9)调试完成后,将project.mexw64放入matlab的目录中,可以直接调用3.调用C语言普通dll

(1)按照一般方法建立dll

MatlabDllTest.cpp:

#include "MatlabDllTest.h"

double add(double x, double y)

{

return (x+y);

}

MatlabDllTest.h:

word.

#ifndef MATLABDLLTEST_H

#define MATLABDLLTEST_H

__declspec(dllexport) double add(double x,double y);

#endif

MatlabDllTest.def:

LIBRARY

EXPORTS

add

(2)生成解决方案。如果matlab是64位的,要把编译平台改成x64。把编译连接之后产生的MatlabDllTest.dll和MatlabDllTest.h文件拷贝到Matlab的当前工作目录下,加载dll:

loadlibrary('MatlabDllTest','MatlabDllTest.h')

查看dll中的函数:

libfunctions MatlabDllTest -full

Functions in library MatlabDllTest:

double add(double, double)

-full选项会列出导出函数的详细输入和输出参数,这是输出信息如下:

调用函数:

calllib('MatlabDllTest', 'add', 1.5, 4.6)

ans =

6.1000

最新文件仅供参考已改成word文本。方便更改

word.

本文来源:https://www.bwwdw.com/article/vfgi.html

Top