matlab调用VC++生成的DLL
matlab是一种脚本语言,执行效率肯定没有C语言那样高效,当然matlab支持调用由C语言生成的.dll动态链接库,从而可以达到matlab与C语言混合便宜的效果。
注意:我使用的平台是matlab2016a与vs2015
1、新建一个空项目
2、分别新建一个H文件和一个C文件,结构目录如下图:
我们来写一个测试程序,其中源文件和头文件如下所示:
// TestDll.h
#ifndef __DSP_H__#define __DSP_H__
#ifdef __cplusplus
extern "C" {
#endif
#define API_DEC __declspec(dllexport)
API_DEC int add(int a, int b);
#ifdef __cplusplus
}
#endif
#endif //__DSP_H__
//TestDll.cpp
#include"TestDll.h"
#pragma warning(disable : 4996)
int add(int a, int b)
{
return a + b;
}
注意:matlab只能调用C语言,所以如果检测到为C++编写的函数会自动变成C语言的输出;宏:API_DEC的作用是产生.dll文件的固有写法,是将函数符号导出,如果你希望别人通过.dll文件调用你写的程序,在函数声明的时候必须加上__declspec(dllexport);C文件中是不需要main函数的。
3、依据matlab位数(32位(X86),64位(X64)),配置输出文件,如下图:
注意:平台配置一定为X64,配置类型输出为.dll
4、点击生成就可以产生TestDll.dll
5、将.dll文件和.h文件一起放到matlab文件目录下面(与调用的地方属于同一级目录)
6、 matlab上操作方法:
[notfound,warnings] = loadlibrary('TestDll','TestDll.h'); %加载.dll库calllib('TestDll', 'add',1,2); %调用动态库里面的函数
%此时就会输出正确的结果
ans =
3
注意1:loadlibrary加载完.dll库可以使用libfunctions dsp -full查看具体函数
>> libfunctions dsp -full
类 lib.dsp 的方法:
int32 add(int32, int32)
注意2:unloadlibrary TestDll 会卸载.dll 文件,释放内存
PS:这是我写的第一篇博客,只希望与大家共同进步,20180622