您的位置:首页 > 编程语言 > MATLAB

vc调用matlab生成的C++dll库总结。

2012-04-09 17:01 363 查看
实验室的一个项目需要调用matlab程序。经过再三考虑,决定使用vc调用matlab导出库的形式。而我主要负责与matlab程序结合的工作。以下是今天工作的简要总结。全当是个备忘吧。

1:在matlab中选择compiler。

在命令行窗口输入:mex-setup

按照提示选择vc6.0.由于使用的是matlab7,不识别vs2010和2008,无奈有装的vc6.0。但听说最新版的matlab可以识别。

2:选择builder.

输入:mbuilder-setup

同样选择vc6.0

3:生成dll。

输入:mex-Wcpplib:mydll-Tlink:libtest.m

4:在vc中使用DLL。

1:配置环境

1:在vc++目录中

包含目录:1:生成的mydll.h所在目录。

2:matlab内的include目录。

库目录:1:mydll.lib所在目录。

2:matlab的lib目录。

:2:在连接器-》输入-》附加依赖项

输入:mydll.libmclmcrrt.libmclmcr.lib

2:将mydll.h加入工程。mydll.dll和mydll.ctf放入工程目录。//不是仅仅需要.h和.dll文件吗?为什么还需要。ctf文件。不明白。

注意事项:

1:在main中调用mydll中的函数之前,一定要调用mydllInitilize()函数。否则将会出现错误。



intmain() { if(!mydllInitlize()) { cout<<"初始化失败!"<<endl; return-1; } //调用dll中的函数。 return0; }
2:将.m文件导出dll库后,如果需要再次编译,一定要首先清空原来dll所在的目录,否则将会出现mexfunctionentrypointmissing的错误。具体原因不详,估计是新生成的文件覆盖原有文件失败。这都是血的教训啊。花了我大量时间找错。

3:在调用多个matlab导出的dll库时,连接过程中会出现LNK2005:void__cdeclmclcppMlfFmultiplydefined

即void__cdeclmclcppMlfF重复定义的情况。采取#ifndef。。。方法,不行。网上搜了下,有遇到类似情况的,但是那家伙也没有解决。后来搜LNK2005错误,有一大堆解决方案。最后采取在项目属性-》配置属性-》链接器-》命令行-》/force强制系统忽略此错误来解决。不管如何至少解决了这个错误。



ithzhang

2012.4.7下午

2012.4.18补充
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: