(2/4)MATLAB(.exe)调用C/C++生成的(.dll)—— MATLAB调用DLL
(.exe)调用(.dll)——Matlab调用DLL【环境配置】(1)Matlab需安装MinGW,以调用C++文件(2)Matlab需安装runtime,以完成离线工具打包【简易教程】【VS操作步骤】11、新建项目工程名:DLL,包括(.h)和(.cpp)22、(.h)文件的函数需设置为外部接口:extern “C” __declspec(dllexport)33、配置管理器-设置:Debug
·
(1/4)MATLAB(.exe)调用C/C++生成的(.dll)—— MATLAB安装MinGW
(2/4)MATLAB(.exe)调用C/C++生成的(.dll)—— MATLAB调用DLL
(3/4)MATLAB(.exe)调用C/C++生成的(.dll)—— MCR下载/安装
(4/4)MATLAB(.exe)调用C/C++生成的(.dll)—— 已编译的应用程序(.exe)不支持使用头文件(.h)加载库(loadlibrary)
本文共给出两种教程方式
一、简易教程
1.1、Visual Studio操作步骤
- 11、新建项目工程名:DLL,包括(.h)和(.cpp);
- 22、(.h)文件的函数需设置为外部接口:extern “C” __declspec(dllexport);
- 33、配置管理器-设置:Debug x64;
- 44、点击-编译;
1.2、MATLAB操作步骤
- 11、将项目文件包下的(.h)和x64下的(.dll)移植到Matlab运行文件路径下;
- 22、命令行窗口:
loadlibrary('dll.dll','dll.h'); %加载dll模块
libfunctions DLL -full %查看DLL中导出的函数
- 33、命令行窗口:
[X1,X2...XN] = calllib('LIBNAME','FUNCNAME',ARG1,...,ARGN) %调用dll中的函数
二、详细教程
2.1、Visual Studio操作步骤
- 11、新建一个C++ DLL项目工程,命名为:MatlabDllTest
- 利用Visual Studio建立一个Win32的Dll工程:文件-新建项目-Win32控制台应用程序
- 应用程序类型:DLL; 附加选项:空项目;
- 22、添加头文件,编辑:MatlabDllTest.h
#pragma once
#ifndef MATLABDLLTEST_H
#define MATLABDLLTEST_H
#ifdef __cplusplus
extern "C"
{
#endif
__declspec(dllexport)double add0(double x,double y);
__declspec(dllexport)int plus0(double x,double y);
#ifdef __cplusplus
}
#endif
#endif
- 33、添加源文件,编辑:MatlabDllTest.cpp
#include "stdafx.h"
#include "MatlabDllTest.h"
double add0(double x,double y)
{
return (x + y);
}
int plus0(double x,double y)
{
return (x - y)
}
- 44、属性配置及rebuild
- (1)选择x64平台生成MatlabDllTest.dll:右击"项目解决方案",点击"属性",点击右上角的"配置管理器",然后选择"活动解决方案配置-Debug",“活动解决方案平台-x64”。
- (2)rebuild程序,此时生成了64位的dll文件。
【备注1】如选择Win32平台生成胡Debug文件夹下胡(.dll),Matlab执行loadlibrary语句时,将显示如下报错提示:“具有与主机不同的体系结构”。
【备注2】Matlab命令行窗口:help loadlibrary(Matlab调用VS函数接口的注意事项:Limitations to Shared Library Support)
【备注3】如果加装的时候报错,需要在VS中修改项目属性:C/C++ -> 代码生成 -> 运行库设置为:多线程调试(/MTd)
2.2、MATLAB操作步骤
- 55、在Matlab的命令窗口输入:
mex -setup
。然后选择编译器:mex -setup C++。- 66、加载DLL —— 把编译链接之后产生的MatlabDllTest.dll和MatlabDllTest.h文件,拷贝到Matlab的当前工作目录下,输入:
loadlibrary('MatlabDllTest.dll','MatlabDllTest.dll');
- 77、查看DLL中导出的函数:
libfunctions MatlabDllTest -full;
其中:-full选项会列出导出函数的详细输入和输出参数,输出信息如下:
- 类 lib.dll 的方法:
- double add0(double,double)
- int32 puls(double,double)
- 88、调用函数:
[ doublePtr ] = calllib('MatlabDllTest','add',1.3,4.6);
【备注1】如果您调用的函数没有正确的输入或输出参数,或者头文件中的函数签名中存在错误,则会发生此错误。报错显示如下:(错误)没有匹配的签名。- 99、从内存中卸载共享C库,以释放内存 ——
unloadlibrary MatlabDllTest;
更多推荐
所有评论(0)