C++和MATLAB混合编程-DLL篇
作者:网络转载 发布时间:[ 2014/6/30 13:43:40 ] 推荐标签:C++ net
先小话一下DLL,DLL是动态链接库,是源代码编译后的二进制库文件和程序接口,和静态链接库不同的是,程序在编译时并不链接动态链接库的执行体,而是在文件中保留一个调用标记,在程序运行时才将动态链接库文件加载入内存。并且DLL在运行时是共享的,即当多个程序调用时,内存中也只保持一份动态链接库。
动态链接库的调用有显式和隐式两种方式。
隐式链接需要用到我们前面生成的plotdata.c,plotdata.h,plotdata.lib以及plotdata.dll文件。
首先将plotdata.c,plotdata.h加入工程中,注意在需要用到函数的文件加入#include “plotdata.h”。
之后链接输入项中写上plotdata.lib。右击工程->Propertites->Link->Input->Additional Dependecies中加上plotdata.lib(也是在调用MATLAB引擎时填写libmat.lib、libeng.lib等的地方)注意plotdata.lib也需要放在你的工程下,或者写全路径,如"D:dataplotadata.lib",需要加引号。
这样在你的代码中可以直接用plotdata.h中的接口函数了。
另显式链接的方式:所谓“显式”说白了是在代码中写出来我要调用这个DLL。
首先我们需要定义一个函数类型,方便我们后面进行函数的强制类型转换。我们可以在plotdata.h中找到我们将要使用的函数plotdata,他的函数声明如下:
extern LIB_plotdata_CPP_API void MW_CALL_CONV plotdata(const mwArray& rgbData);
忽略那些复杂的宏定义,模仿着定义我们自己的函数类型:
typedef void (*HMAT)(const mwArray& rgbData);
之后在代码中显式链接plotdata.dll
HINSTANCE hDLL=NULL;//DLL句柄
hDLL=LoadLibrary("plotdata.dll");
HMAT plotData=(HMAT)GetProcAddress(hDLL,"plotdata");
//第一个参数为DLL句柄,第二个为要加载的函数名
之后便可直接在代码中直接使用函数plotData了。这种显式链接只需要plotdata.dll文件即可~
下面我们来看一下生成的函数接口
extern LIB_plotdata_C_API
bool MW_CALL_CONV plotdataInitializeWithHandlers(
mclOutputHandlerFcn error_handler,
mclOutputHandlerFcn print_handler);
extern LIB_plotdata_C_API
bool MW_CALL_CONV plotdataInitialize(void);
extern LIB_plotdata_C_API
void MW_CALL_CONV plotdataTerminate(void);
extern LIB_plotdata_C_API
void MW_CALL_CONV plotdataPrintStackTrace(void);
extern LIB_plotdata_C_API
bool MW_CALL_CONV mlxPlotdata(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[]);
extern LIB_plotdata_C_API
long MW_CALL_CONV plotdataGetMcrID();
extern LIB_plotdata_C_API bool MW_CALL_CONV mlfPlotdata(mxArray* rgbData);
|
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11