【Matlab】C++和MATLAB混合编程DLL篇.pdfVIP

  • 5
  • 0
  • 约3.81千字
  • 约 4页
  • 2020-01-21 发布于江苏
  • 举报
本文由西安白癜风医院/ 收集,转载请注明出处 【Matlab 】C++和MATLAB 混合编程-DLL 篇 先小话一下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:\data\ plotadata.lib,需要加引号。 这样在你的代码中就可以直接用plotdata.h 中的接口函数了。 另显式链接的方式:所谓“显式”说白了就是在代码中写出来我要调用这个DLL。 首先我们需要定义一个函数类型,方便我们后面进行函数的强制类型转换。我 们可以在plotdata.h 中找到我们将要使用的函数plotdata,他的函数声明如下: [cpp] view plaincopy 1. extern LIB_plotdata_CPP_API void MW_CALL_CONV plotdata(const mwArray rgbData); 忽略那些复杂的宏定义,模仿着定义我们自己的函数类型: [cpp] view plaincopy 1. typedef void (*HMAT)(const mwArray rgbData); 本文由西安白癜风医院/ 收集,转载请注明出处 本文由西安白癜风医院/ 收集,转载请注明出处 之后在代码中显式链接plotdata.dll [cpp] view plaincopy 1. HINSTANCE hDLL=NULL;//DLL 句柄 2. hDLL=LoadLibrary(plotdata.dll); 3. HMAT plotData=(HMAT)GetProcAddress(hDLL,plotdata); 4. //第一个参数为DLL 句柄,第二个为要加载的函数名 之后便可直接在代码中直接使用函数 plotData 了。这种显式链接只需要 plotdata.dll 文件即可~ 下面我们来看一下生成的函数接口 [cpp] view plaincopy 1. extern LIB_plotdata_C_API 2. bool MW_CALL_CONV plotdataInitializeWithHandlers( 3. mclOutputHandlerFcn error_handler, 4. mclOutputHandlerFcn print_handler); 5. 6. extern LIB_plotdata_C_API 7. bool MW_CALL_CONV plotdataInitialize(void); 8. 9. extern LIB_plotdata_C_API 10.void MW_CALL_CONV plotdataTerminate(void); 11. 12.extern LIB_plotdata_C_API 13.void MW_CALL_CONV plotdataPrintStackTrace(void ); 14. 15.extern LIB_plotda

文档评论(0)

1亿VIP精品文档

相关文档