欢迎来到天天文库
浏览记录
ID:53239822
大小:37.00 KB
页数:3页
时间:2020-04-02
《在matlab中调用c程序(32位与64位matlab).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1.Maltab编译Mex文件(不可调试)(1)helloword在matlab命令行中输入:mex-setup选择合适编译器,完成设置。新建一个文件,输入:#includevoidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){ mexPrintf("Helloword!");}把上面程序保存为一个C文件,如 hello.c在commandwindow下运行>>mexhello.c>>结束之后在currentfolde
2、r窗口里会有一个hello.mexw32文件。在commandwindow下运行>>hello()Helloword!(2)如果是多维数组并不能用Arr[i][j]的格式寻址,在参数在C里只是一维数组,一维数组按列排列,C语言是按行排列的,如[abcd;efgh]C语言在内存中是按abcdefgh排列,而matlab是按aebfcgdh排列的。如果要变成C语言可Arr[i][j]索引的格式,可用for循环转化打印函数:mexPrintf()相当于matlab的disp函数,mexPrintf函数里需要打印的部分必须用""而不
3、能用'' 子函数的问题:子函数有两种方式,一种采用return值得方式返回值另一种方式为利用参数返回值,把需要return的值直接赋给形参。 多个.c文件的编译:多个.c文件中只能存在一个mexFunction函数可用mex('a.c','b.c','d.c')的格式编译2.在VS中调试mex(1)在vs中建立dll工程,建立project.cpp文件,输入#include"project.h"#includevoidmexFunction(intnlhs,mxArray*plhs[],intnrhs,cons
4、tmxArray*prhs[]){ mexPrintf("Helloword!");}建立.h文件,输入#include"matrix.h"#include"mex.h"#defineTESTMATLAB_EXPORTS#ifdefTESTMATLAB_EXPORTS#defineMEX_FUNCTION_API__declspec(dllexport)#else#defineMEX_FUNCTION_API__declspec(dllimport)#endifMEX_FUNCTION_APIvoidmexFuncti
5、on(intnlhs,mxArray*plhs[],intnrhs,mxArray*prhs[]);建立project.def文件,输入LIBRARYEXPORTSmexFunction(1)添加include和lib路径若matlab为32位,liblujing为:D:ProgramFilesMATLABR2014aexternlibwin3264位则为:D:ProgramFilesMATLABR2014aexternlibwin64microsoftinclude路径为:D:ProgramFi
6、lesMATLABR2014aexterninclude(2)添加链接器附加依赖项libmx.liblibeng.liblibmat.liblibmex.lib,将连接器输出的文件名称后缀,project.dll改为project.mexw32,64位改为project.mexw64(3)设置C/C++-代码生成-运行库为多线程调试(/Mtd)(4)若为64位matlab,还需将vs的编译平台设置为x64(5)生成解决方案,会在debug目录生成project.mexw64.(6)打开matlab,将工作目录改到如上
7、debug目录,包含project.mexw64文件(7)开始调试,在vs中cpp文件设置端点,选择工具-附件到进程-matlab-添加,再在matlab中运行该文件,即可跳入端点处.(8)调试完成后,将project.mexw64放入matlab的目录中,可以直接调用3.调用C语言普通dll(1)按照一般方法建立dllMatlabDllTest.cpp:#include"MatlabDllTest.h"double add(double x, double y){ return (x+y);}MatlabDllTes
8、t.h:#ifndefMATLABDLLTEST_H#defineMATLABDLLTEST_H__declspec(dllexport)doubleadd(doublex,doubley);#endifMatlabDllTest.def:LIBRARYEXPORTSadd(2)生成解决方
此文档下载收益归作者所有