没有合适的资源?快使用搜索试试~ 我知道了~
首页Matlab与C语言混合编程汇总完整版
资源详情
资源评论
资源推荐

mxGetPr(plhs[0]);
*a
*a;
Matlab
Matlab
Matlab
Matlab与C
C
C
C混合编程汇总
1.
1.
1.
1.Matlab
Matlab
Matlab
Matlab调用C
C
C
C
1)
1)
1)
1)MEX
MEX
MEX
MEX方法(注:Matlab
Matlab
Matlab
Matlab自带的LCC
LCC
LCC
LCC不支持中文注释)
/////////////////////////////////////////////////////////////////
原C程序:
//add.h
#ifndefLIB_H
#defineLIB_H
extern"C"intadd(intx,inty);//声明为C编译、连接方式的外部函数
#endif
//add.c
#include"add.h"
intadd(intx,inty)
{
returnx+y;
}
/////////////////////////////////////////////////////////////////
改写后的MEX程序:
//完整的add.c如下:
#include"add.h"
#include"mex.h"//使用MEX文件必须包含的头文件
//执行具体工作的C函数
doubleadd(doublex,doubley)
{
returnx+y;
}
//MEX文件接口函数
voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[])
{
double
doubleb,c;
plhs[0]=mxCreateDoubleMatrix(1,1,mxREAL);
a=
b=*(mxGetPr(prhs[0]));
c=*(mxGetPr(prhs[1]));
=add(b,c);
}
/////////////////////////////////////////////////////////////////
编译:mexadd.c

2
2
2
2 ) DLL
DLL
DLL
DLL 方法( C
C
C
C 生成)
/////////////////////////////////////////////////////////////////
打开 Vs2010 ,文件 -> 新建 -> 项目 ->Win32 项目 -> 应用程序类型选择 DLL ,输入以下代码:
//add.h
#ifndef LIB_H
#define LIB_H
extern "C" int __declspec ( dllexport )add( int x, int y);
#endif
//add.c
#include "add.h"
int add( int x, int y)
{
return x + y;
}
/////////////////////////////////////////////////////////////////
% Matlab 调用 DLL
% 用 loadlibrary 函数, 根据 add.h 中的函数定义,加载 add.dll
loadlibrary( 'add.dll' , 'add.h' );
% 查看 add.dll 支持的函数接口
libfunctions add -full
% int32 add(int32, int32)
out=calllib( 'add' , 'add' ,23,32);
unloadlibrary( 'add' )
2
2
2
2 C
C
C
C 调用 Matlab
Matlab
Matlab
Matlab
1
1
1
1 ) DLL
DLL
DLL
DLL 方法( Matlab
Matlab
Matlab
Matlab 生成)
/////////////////////////////////////////////////////////////////
function out = add(x,y)
out = x + y;
将 M 文件编译成 DLL :
mcc -W lib:add -T link:lib add.m
用 Matlab 调用 DLL 查看函数
loadlibrary( 'add.dll' , 'add.h' );
% 查看 add.dll 支持的函数接口
libfunctions add -full
/////////////////////////////////////////////////////////////////
将生成的 add.h 、 add.dll 、 add.lib 等拷入项目所在文件夹,并设置 VS2010 编译器:
a) 项目 -> 属性 -> C/C++ -> 常规 -> 附加包含目录:
D:\Softwares\MATLAB\R2009b\extern\include
b) 项目 -> 属性 -> 链接器 -> 常规 -> 附加库目录:
D:\Softwares\MATLAB\R2009b\extern\lib\win32\microsoft
c )项目 -> 属性 -> 链接器 -> 常规 -> 输入: mclmcrrt.lib
mclmcrrt.lib
mclmcrrt.lib
mclmcrrt.lib add
add
add
add .lib
.lib
.lib
.lib ( 分行没有逗号 )
/////////////////////////////////////////////////////////////////
// 此处为静态调用 DLL ,注意 C 对格式的要求:变量声明要在函数定义之前

#include "add.h"
mxArray *result = NULL;
mxArray *result_1[1] = {NULL};
mxArray *arguments[2] = {NULL,NULL};
double *output = NULL;
int main( int argc, char * argv[])
{
if ( !mclInitializeApplication(NULL,0))
{
fprintf(stderr, "Could not initialize the application.\n" );
exit(1);
}
if ( !addInitialize())
{
fprintf(stderr, "Could not initialize the library.\n" );
exit(1);
}
arguments[0] = mxCreateDoubleScalar(2.0);
arguments[1] = mxCreateDoubleScalar(3.0);
//result = mxCreateDoubleMatrix(1,1,mxREAL);
//mlxAdd(1, &result, 2, arguments);
mlfAdd(1, &result, arguments[0],arguments[1]);
output = mxGetPr(result);
//mlxAdd(1, result_1, 2, arguments);
mlfAdd(1, result_1, arguments[0],arguments[1]);
output = mxGetPr(result_1[0]);
printf( "result is: %f\n" ,*output);
mxDestroyArray(result);
mxDestroyArray(arguments[0]);
mxDestroyArray(arguments[1]);
addTerminate();
mclTerminateApplication();
return 0;
}
2
2
2
2 ) Engine
Engine
Engine
Engine 方法
配置编译器
要在 VC 中成功编译 Matlab 引擎程序,必须包含引擎头文件 engine.h 并引入 Matlab 对应
的库文件 libmx.lib 、 libmat.lib 、 libeng.lib 。具体的说,打开一个工程后,做如下设置:
a) 项目 -> 属性 -> C/C++ -> 常规 -> 附加包含目录:
D:\Softwares\MATLAB\R2009b\extern\include
b) 项目 -> 属性 -> 链接器 -> 常规 -> 附加库目录:
D:\Softwares\MATLAB\R2009b\extern\lib\win32\microsoft
c )项目 -> 属性 -> 链接器 -> 常规 -> 输入: libmx.lib 、 libmat.lib 、 libeng.lib ( 分行没有逗号 ) ,
剩余10页未读,继续阅读















安全验证
文档复制为VIP权益,开通VIP直接复制

评论1