windows 32/64位系统 VS2010调用MATLAB2012生成的dll方法
2016-01-22 21:56
676 查看
功能: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)属性 -> VC++ 目录 -> 包含目录, 添加
...\MATLAB\extern\include\
(2)属性 -> VC++
目录 - ->
库目录, 添加
...\MATLAB\extern\lib\win32\microsoft(64位改为win64)
还要添加你MATLAB生成库的目录
(3)属性 ->C/C++ ->
通用 -> 附加包含目录, 添加
...\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();
}
如果运行没问题,恭喜成功
系统: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)属性 -> VC++ 目录 -> 包含目录, 添加
...\MATLAB\extern\include\
(2)属性 -> VC++
目录 - ->
库目录, 添加
...\MATLAB\extern\lib\win32\microsoft(64位改为win64)
还要添加你MATLAB生成库的目录
(3)属性 ->C/C++ ->
通用 -> 附加包含目录, 添加
...\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();
}
如果运行没问题,恭喜成功
相关文章推荐
- 如何重装TCP/IP协议
- Windows 8 官方高清壁纸欣赏与下载
- 谁是桌面王者?Win PK Linux三大镇山之宝
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows Clang开发环境备忘
- 从Windows系统下访问Linux分区相关软件
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows下搭建本地SVN服务器
- 利用开源软件打造自己的全功能远程工具
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
- 微软镜像下载
- windows server域用户提升到本地更高权限组中的方法
- 使用命令修改注册表键值及权限
- 通过手机、电脑远程开关机,Windows和linux机手机,电脑相互控制
- Windows XP最新应用技巧大荟萃
- Windows 系统组策略应用全攻略(上)第1/2页