Matlab 2016a和VS2013混合Dll编程步骤总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Matlab 2016a和VS2013混合Dll编程步骤
1. 从Matlab导出.m文件为Dll文件;
Step1:将Matlab工作路径转为目标.m文件所在文件夹,在控制栏输入“mex –setup”,弹出如下说明:
Step2:点击“mex –setup C++”,弹出如下说明,看到“MEX configured to use ‘Microsoft Visual C++ 2013 Professional’ for C++ language compilation”,说明配置好用C++语
言进行编译;
Step3:继续输入“deploytool”,弹出compile窗口,选择第三个,即Library Compiler;
Step4:在弹出窗口中,左上角选择“C++ Shared Library”,右侧添加需要转换的.m文件,下面第一行输入转换后的Dll文件名,最后点击右上角“Package”对号,如果.m
文件中包含其他.m文件中的函数,不用一起添加,Matlab会自动检测,然后在窗
口下面框中显示出依赖文件;
Step5:生成后文件夹如下图所示,第一个文件夹中的exe文件用于程序发布时用,第二个文件夹中包含相当于release下得.h,.lib和.dll文件,第三个文件包含测试用
地.h,.lib和.dll文件等文件,是测试需要的;
Step6:新建一个Win32控制台应用程序工程,自己命名,比如然后将for_testing文件中的.h,.lib和.dll文件拷到新建应用程序下和.cpp文件放在一起,如下图
2. 配置电脑系统环境变量和VS工程属性;
Step1:在系统环境变量的Path中添加“Matlab安装目录\bin\win64;”
Step2:在项目属性中的包含目录添加“Matlab安装目录\extern\include;”
Step3:在项目属性中的库目录添加“Matlab安装目录\extern\include\lib\win64\microsoft;”
Step4:在项目属性链接器输入中添加以下库名
libmat.lib
libmex.lib
mclmcr.lib
mclmcrrt.lib
libemlrt.lib
libeng.lib
libfixedpoint.lib
libcovrt.lib
Step5:为项目添加matlab生成的头文件(上面Step6中和cpp文件放一起的那个.h文件)。

3. 编写测试程序:
// cpp5.cpp : 定义控制台应用程序的入口点。

#include"stdafx.h"
#include<stdio.h>
#include<iostream>
#include"mclmcr.h"
#include"matrix.h"
#include"mclcppclass.h"
#include"Mylib.h"
using namespace std;
#pragma comment(lib,"Mylib.lib")
int_tmain(int argc, _TCHAR* argv[])
{
if (!MylibInitialize()) //初始化
{
printf("Could not initialize addfunction!");
exit(0);
}
printf("OK!");
mwArray result(1, 1, mxDOUBLE_CLASS, mxREAL);
mwArray a(1, 1, mxDOUBLE_CLASS, mxREAL);
mwArray b(1, 1, mxDOUBLE_CLASS, mxREAL);
double data1 = 2; double data2 = 3;
a.SetData(&data1, 1);
b.SetData(&data2, 1);
result.SetData(&data2, 1);
f(1, result, a, b); //调用自己用matlab写的函数
x = a.Get(1, 1);
y = b.Get(1, 1);
z = result.Get(1, 1);
printf("%lf\n", x);
printf("%lf\n", y);
printf("%lf\n", z);
MylibTerminate();
return 0;
}
4. mwArray类常用方法的调用和问题;
a. 将数组数据输入到mwArray变量中:
result.SetData(array, len);
其中array是数组名,len是数组长度,如果是标量,如上面代码中所示;
b. 获取mwArray中数据:
y = b.Get(arg1, arg2,…);
arg1是索引数目,后面输入参量是索引;
5. 常见问题汇总:
1. 系统变量一定不能多设,例如Matlab runtime路径设置一个就可以;Matlab安装目录下的bin\Win64路径只需着一个就可以,像…\lib和…\bin等母路径不必多加,多加反而画蛇添足,导致程序运行出现一系列莫名其妙的问题。

还有链接器中输入项添加的.lib文件只需添加用到的库,没有用到的不要加,常用的就是libmx.lib,libmat.lib,mclmcrrt.lib,mclmcr.lib。

2. 上面添加include路径和lib路径是在VC++目录下,而不是在C/C++目录下,否则会出现程序崩溃问题;
3. 如果提示缺失”mclmcr.lib”,是因为没有配置系统环境变量;
4. 如果mwDLLInitialize初始化错误,程序编译无错误但运行出错,检查时候是系统环境变量添加冗余;
5. Matlab同样可以导出.Net架构下得Dll文件,以供C#语言调用,该过程比转为C++能用的Dll要简单,工程配置少,问题少。

相关文档
最新文档