Matlab7.0、VC++6.0 .m生成.dll由C++调用.

前言(废话,可略过):由于工作需要,使用matlab和vs进行混合编程,win10已安装matlab7.0和vs2008,由于matlab7.0不识别vs2008,额外安装了vc++6.0,进入正题。。

平台:

win10、matlab7.0、vc++6.0

操作步骤:

1、设置matlab编译器,选择vc++6.0

2、命令m文件生成dll文件

3、vc++6.0环境设置

4、编程调用dll文件

实现:

1、设置matlab编译器,选择vc++6.0

matlab输入命令:mex -setup、mbuild -setup,均选择vc++6.0编译器(当然了,高版本matlab也可以选择显示出的vs20xx版本)

2、命令m文件生成dll文件

matlab输入命令:edit,弹出文本编辑框,输入代码:function c = MyAdd(a, b); c = a + b; end 注意换行,end可要可不要。

ctrl + s默认保存在matlab的work目录下。

输入命令:mcc -W cpplib:libMyAdd -T link:lib MyAdd

包含MyAdd.m文件的work目录下,生成如下几个文件:

libmyadd.cpp

libMyAdd.ctf

libMyAdd.dll

libMyAdd.exp

libmyadd.exports

libmyadd.h

libMyAdd.lib

libmyadd_mcc_component_data.c

3、vc++6.0环境设置

新建空控制台程序

添加include和lib库所在目录,tool->option->directory,选择include files,添入C:\MATLAB7\extern\include、C:\MATLAB7\work,具体目录根据安装选择,选择library files,添入C:\MATLAB7\extern\lib\win32\microsoft、C:\MATLAB7\work,因为出现找不到相应lib文件的情况,所以我又添加了C:\MATLAB7\extern\lib\win32\microsoft\msvc60这个文件夹;然后添加lib文件,project setting->link->object/library modules,末尾添加 libMyAdd.lib mclmcrrt.lib libmx.lib libmat.lib mclmcr.lib;最后将 libMyAdd.ctf和libMyAdd.dll两个文件复制到新建的控制台工程的debug目录下。

4、编程调用dll文件

dll文件名为动态链接库,此时进入vc++6.0环境下进行编程。

新建cpp文件,添加以下代码,保存、编译、运行

/*********************************************代码区*************************************************/

#include "mclmcr.h"
#include "matrix.h"
#include "mclcppclass.h"
#include "libMyAdd.h"
#include <stdio.h>
#include <iostream.h>
int main(void)
{
double a = 6;
double b = 9;
double c;
// initialize lib,这里必须做初始化!
if( !libMyAddInitialize())
{
std::cout << "Could not initialize libMyAdd!" << std::endl;
return -1;
}
// 为变量分配内存空间,可以查帮助mwArray
mwArray mwA(1, 1, mxDOUBLE_CLASS); // 1,1表示矩阵的大小(所有maltab只有一种变量,就是矩阵,为了和Cpp变量接轨,设置成1*1的矩阵,mxDOUBLE_CLASS表示变量的精度)
mwArray mwB(1, 1, mxDOUBLE_CLASS);
mwArray mwC(1, 1, mxDOUBLE_CLASS);
// set data,不用我解释了吧,很简单的,调用类里面的SetData函数给类赋值
mwA.SetData(&a, 1);
mwB.SetData(&b, 1);
// using my add,掉我自己写的函数
myadd(1, mwC, mwA, mwB);
// get data,不用我解释了吧,很简单的,调用类里面的Get函数获取取函数返回值
c = mwC.Get(1, 1);
printf("c is %f\n", c);
// 后面是一些终止调用的程序
// terminate the lib
libMyAddTerminate();
// terminate MCR
mclTerminateApplication();
return 0;
}
/********************************************代码区**************************************************/

至此,dos窗口出现运行结果:c is 15.000000,a和b代码中分别设为了9和6,则表示成功。

其它参考链接(已测可用):https://zhidao.baidu.com/question/746779163550503052.html

http://www.cnblogs.com/lidabo/p/3501270.html#commentform

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值