windows 32/64位系统 VS2010调用MATLAB2012生成的dll方法
来源:互联网 发布:淘宝炸鱼鱼雷在哪卖 编辑:程序博客网 时间:2024/05/17 00:28
功能:MATLAB程序编译为dll供vs2010使用
系统:windows10 64位/windows 7 32位均可
工具:vs2010 matlab2012a
step1:
m文件准备,准备m文件一份,一定要是 function格式的,输入输出明确。这里我用到的是C(A,B,C);这个函数的功能就不过多解释了,总之有3个输入,在某个输入下有输出。
step2:
MATLAB的设置,m文件要变为dll需要使用MATLAB的mex功能。具体代码如下:
>> mex -setup 选择VS2010,一路y下去就可以了。
>> mbuild -setup 选择VS2010,一路y下去就可以了。
>> mcc -W cpplib:Mylib -T link:lib mym.m (Mylib是你要存成dll、lib及h文件的名字,mym.m是原m文件的名字)
根据机器的性能及m文件的复杂程度不同,这个过程可能时间很长,也可能马上就结束,但中间不会报错,耐心等待就行了。成功以后在m文件的当前文件夹下会生成一堆以Mylib为名字的文件,其中我们要用到的有h、lib和dll三个文件。
step3:
系统环境变量的配置,从这块开始32位和64位系统就有所不同了,因为MATLAB安装后32位和64位的机器下包含文件和库目录的文件有所不同。环境变量如何配置请百度。现在只说配置的内容:
注:如果不配置的话,VS下编译是没有问题的,但是运行时会报错,说你缺少各种库
(1)32位系统
用户变量path:...\MATLAB\extern\lib\win32\microsoft;
...\MATLAB\bin\win32
系统变量path:...\MATLAB\runtime\win32;
...\MATLAB\bin;
...\MATLAB\extern\lib\win32\microsoft;
...\MATLAB\bin\win32
(2)64位系统
用户变量path:...\MATLAB\extern\lib\win64\microsoft;
...\MATLAB\bin\win64
系统变量path:...\MATLAB\runtime\win64;
...\MATLAB\bin;
...\MATLAB\extern\lib\win64\microsoft;
...\MATLAB\bin\win64
step4:VS添加MATLAB生成库:
建一个vs控制台工程(有需要的话你也可以做MFC,但MFC下窗口数据的交互与MATLAB dll接口函数的数据交换会变量类型转换的问题,比较麻烦),然后将MATLAB编译好的那3个文件,h、lib和dll三个文件,复制到工程文件下,然后在工程中添加现有头文件,把.h文件添加进去。打开.h文件你会发现定义好的函数声明,比如我这里是C函数,可以在头文件里看到
C(int nargout, mwArray& X, const mwArray& A, const mwArray& B, const mwArray& C);
这个函数共有5个变量,后3个是你m文件中本来的变量,nargout是在C中输出变量的个数, X是输出变量的矩阵,这个等下会说如何调用。
VS工程文件配置( ...\是你MATLAB安装的位置):
(1)属性
...\MATLAB\extern\include\
(2)属性
...\MATLAB\extern\lib\win32\microsoft(64位改为win64)
还要添加你MATLAB生成库的目录
(3)属性
...\MATLAB\extern\include\
(4)属性
...\MATLAB\extern\lib\win32\microsoft(64位改为win64)
(5)属性
libeng.lib
libmat.lib
libmex.lib
libmx.lib
mclmcrrt.lib
mclmcr.lib
Mylib.lib (你自己的库)
VS工程新建一个cpp文件,头文件添加
#include <iostream>
#include "mclmcr.h"
#include "matrix.h"
#include "mclcppclass.h"
#include "mylib.h" (你自己h文件的名字)
void main()
{
if( !mylibInitialize())
{
cout<<"init error"<<endl;
}
// 为变量分配内存空间,可以查帮助mwArray
mwArray outstr;
mwArray A(5, 1, mxDOUBLE_CLASS); // 5,1表示矩阵的大小(所有maltab只有一种变量,就是矩阵,
mwArray B(5, 1, mxDOUBLE_CLASS);//为了和Cpp变量接轨,设置成1*5的矩阵,mxDOUBLE_CLASS表示变量的精度)
mwArray C(1, 1, mxDOUBLE_CLASS);
mwArray mwYT(1,1, mxDOUBLE_CLASS);
C(0,mwYT,A,B,C);
string a;
a=outstr.ToString();
//a = mwYT.Get(1, 1); //调用类里面的Get函数获取取函数返回值
cout<<a<<endl;
// 后面是一些终止调用的程序
mylibTerminate();
// terminate MCR
mclTerminateApplication();
}
如果运行没问题,恭喜成功
- windows 32/64位系统 VS2010调用MATLAB2012生成的dll方法
- matlab2012生成的dll调用出现无法初始化,libmx.dll找不到等问题
- 使用vs2010生成64位的dll文件
- Matlab2015编译生成Dll并在VS2010环境下应用的具体操作步骤(64位系统)
- Windows 32位/64位系统中vs2010配置opencv的问题
- 32位系统安装 64位windows 7的方法
- VS2010下生成dll的方法
- VS2010下生成dll的方法(更新)
- VS2010下生成dll的方法
- VS2010下生成dll的方法
- VS2010下生成dll的方法
- Windows 7/8 64位系统 不能注册32位dll 文件的解决方案
- windows 10(64位)下实现vs20120C++调用matlab r2014a编写的m文件生成的.dll,.lib,.h文件
- VS2010 (MFC)调用 C#生成DLL的两种方法
- 64位win7系统的VS2010生成C#执行exe无法在32位机器运行的解决办法
- vs2010 x64平台调用64位DLL问题
- 64位进程调用32位dll的解决方法
- 64位进程调用32位dll的解决方法
- 外观模式
- 团队开发
- Start
- pat1030完美数列bug总结,
- x265-1.7版本-common/frame.cpp注释
- windows 32/64位系统 VS2010调用MATLAB2012生成的dll方法
- 蓝桥杯 十六进制转八进制
- ANR分析和实例
- android的数据存储方式------5种
- 指针法去空格
- Git初学笔记(一)
- HDU 1160 FatMouse's Speed
- python模块系列之 - time,datetime,calendar
- uva 1427 - Parade 游行 需要优化!