将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的主要内容,如果未能解决你的问题,请参考以下文章