将 MATLAB 连接到 C 语言 DLL

connecting matlab to c language dll

本文关键字:语言 DLL MATLAB 连接      更新时间:2023-10-16

我正在尝试在 Matlab 中使用 clllib 函数.dll我将文件和 .h 文件放在与正在开发的 .m MATLAB 文件相同的目录中,之后我尝试使用加载库函数 bui 它有一些警告

警告:

Warning: 
Message from C preprocessor:
lcc preprocessor error: C:UsersMAHNAZDocumentsMATLABT1Header.h:1 Could not find include file
<iostream>
lcc preprocessor warning: C:UsersMAHNAZDocumentsMATLABT1Header.h:21 EOF inside comment
> In loadlibrary at 351
Warning: The function 'Add' was not found in the library
> In loadlibrary at 435
Warning: The function 'Function' was not found in the library
> In loadlibrary at 435

当我想像这样使用calllib函数时: calllib('t1', 'Add', 2,3) Matlab 给了我一个错误:

??? Error using ==> calllib Method was not found.

我的头文件是:

#ifndef T1_HEADER_H
#define T1_HEADER_H
extern int Add( int a, int b );
extern void Function( void );
#endif

我的源文件是:

#include iostream
#include "T1Header.h"
  extern int Add( int a, int b )
   {
       return( a + b );
   }
  extern void Function( void ) 
  { 
     std::cout << "DLL Called!" << std::endl;
  }

我使用 visual c++ 2010 和 Matlab 7.6.0(R2008a)

关于出了什么问题,我可以做些什么来修复此错误,或者我可以尝试从 MATLAB 中调用此.dll的任何建议?

前面的一些注释和评论:

  • 加载iostream的错误听起来有点像代码被处理为C而不是C++。
  • 您粘贴的源文件的名称周围没有尖括号 iostream ,但我想当你写这篇文章时它们已经丢失了。
  • 定义函数时不应extern函数。
  • 您粘贴的错误消息提到了粘贴中未包含的评论。
  • 我有点惊讶 matlab 甚至会查看标头,我会假设它只使用 DLL 文件。

但是这个问题的主要原因,假设DLL文件最终被创建,应该是这样的:Matlab可能希望使用C调用约定,所以你应该在头和实现中将你的函数括在extern "C" { … }块中。