将matlab连接到c语言dll

Posted

技术标签:

【中文标题】将matlab连接到c语言dll【英文标题】:connecting matlab to c language dll 【发布时间】:2012-08-07 11:17:11 【问题描述】:

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

警告:

Warning: 
Message from C preprocessor:

lcc preprocessor error: C:\Users\MAHNAZ\Documents\MATLAB\T1Header.h:1 Could not find include file
<iostream>

lcc preprocessor warning: C:\Users\MAHNAZ\Documents\MATLAB\T1Header.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 的任何建议?

【问题讨论】:

【参考方案1】:

前面的一些笔记和cmets:

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

但是这个问题的主要原因,假设 DLL 文件最终被创建,应该是这样的:Matlab 可能会想要使用 C 调用约定,所以你应该将你的函数包含在 @987654323 @ 块在标头和实现中。

【讨论】:

我更改了头文件和源文件: extern "C" int Add( int a, int b ) return( a + b ); void Function( void ) printf("DLL Called.\n"); >> loadlibrary('t1.dll', 'T1Header.h') 警告:来自 C 预处理器的消息:lcc 预处理器警告:C:\Users\MAHNAZ\Documents\MATLAB\T1Header.h:21 末尾没有换行符文件 > 在 loadlibrary 中 351 警告:在库中找不到函数“添加”> 在 loadlibrary 中,在 435 警告:在库中找不到函数“Function”并且 calllib 函数找不到 ADD 方法

以上是关于将matlab连接到c语言dll的主要内容,如果未能解决你的问题,请参考以下文章

将外部语言服务器连接到 VSCode 扩展

c语言函数习题

帮忙做一个超音波测距仪程序,c语言和汇编语言都行

当涉及多种编码语言时,如何将我的应用程序连接到蓝牙?

请问如何将下列C语言程序改成matlab中的m文件?

PYTHON-DAY17-模块