c matlab 接口,C直接调用Matlab提供的C接口和库

http://www.comprg.com.cn/detail.asp?hw_id=2630

4.直接用C编程

直接用C编程也是可以的,它是通过对Matlab的数学库函数的调用来实现的,如果能用Matlab实现的语句,就用不着非得用C直接编程因为直接用C编程与把.m文件通过mcc转换成的C代码是一样的。

如要实现Matlab中的以下三行功能:

A=[1 2 3 4];

B=[4 3 2 1];

C=A+B;

自己直接用C要这样写

static double a[4] = { 1.0, 2.0, 3.0, 4.0 };

static double b[4] = { 4.0, 3.0, 2.0, 1.0 };

mxArray * A = mclGetUninitializedArray();

mxArray * B = mclGetUninitializedArray();

mxArray * C = mclGetUninitializedArray();

mlfAssign(&A, mlfDoubleMatrix(1, 4, a, NULL));

mlfAssign(&B, mlfDoubleMatrix(1, 4, b, NULL));

mlfAssign(&C, mlfPlus(A, B));

而如果用mcc把上面三行转化为C代码以后为:

static double __Array0_r[4] = { 1.0, 2.0, 3.0, 4.0 };

static double __Array1_r[4] = { 4.0, 3.0, 2.0, 1.0 };

mxArray * A = mclGetUninitializedArray();

mxArray * B = mclGetUninitializedArray();

mxArray * C = mclGetUninitializedArray();

mlfAssign(&A, mlfDoubleMatrix(1, 4, __Array0_r, NULL));

mlfAssign(&B, mlfDoubleMatrix(1, 4, __Array1_r, NULL));

mlfAssign(&C, mlfPlus(A, B));

它们实质上是一样的,直接用C编程不如先写.m代码,再用mcc工具转换。

对Matlab与VC编译器环境的配置工作与上面第3节介绍的一样。

注意:libmx.lib libmatlb.lib libmmfile.lib libmat.lib 文件并不是Matlab自带的,Matlab只提供了libmx.dll libmatlb.dll libmmfile.dll libmat.dll  用户需要自己编译,在VC有两种方式实现(推荐方式(2))

(1)VC集成编译环境中打开 matlab\extern\examples\cppmath\msvc 下的工程文件msvc42.mak,选project->settings->C/C++->code generation 为Debug Multithread Dll选项,Build即可。

(2)把VC的bin目录下的vcvars32.bat拷贝的C盘根目录下运行msconfig将vcars32.bat添加的Auoexec.bat中去。

重新启动计算机。

回到MS_DOS方式下在matlab\extern\include运行

lib /def:libmat.def  /machine:ix86  /out:libeng.lib

lib /def:libmatlb.def  /machine:ix86  /out:libmatlab.lib

lib /def:libmmfile.def  /machine:ix86  /out:libmmfile.lib

lib /def:libmx.def  /machine:ix86  /out:libmx.lib

不论是方式(1)还是(2),生成的libmx.lib libmatlb.lib libmmfile.lib libmat.lib文件都要拷贝到c:\matlab\extern\lib(也就是添加到VC的编译路径中去)。

本文中的文件路径可能跟读者计算机中的路径有所不同,请参照修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值