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

本文介绍了如何使用VC++调用MATLAB生成的DLL库,包括配置环境、生成DLL及在VC++中使用的步骤,并列举了一些常见问题及其解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


实验室的一个项目需要调用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 -W cpplib:mydll  -T link:lib test.m

 

4:在vc中使用DLL。

1:配置环境

    1:在vc++目录中

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

                                                 2:matlab 内的include目录。

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

                                            2:matlab的lib目录。

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

                                                  输入:mydll.lib   mclmcrrt.lib     mclmcr.lib

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

 

 

注意事项:

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

int main()
{
   if(!mydllInitlize())
     {
       cout<<"初始化失败!"<<endl;
       return -1;
     }
    //调用dll中的函数。
     return 0;
}
 

2:将.m文件导出dll库后,如果需要再次编译,一定要首先清空原来dll所在的目录,否则将会出现mexfunction entry point missing 的错误。具体原因不详,估计是新生成的文件覆盖原有文件失败。这都是血的教训啊。花了我大量时间找错。

3:在调用多个matlab导出的dll库时,连接过程中会出现LNK2005: void __cdecl mclcppMlfF multiply defined
void __cdecl mclcppMlfF 重复定义的情况。采取#ifndef 。。。方法,不行。网上搜了下,有遇到类似情况的,但是那家伙也没有解决。后来搜LNK2005错误,有一大堆解决方案。最后采取在项目属性-》配置属性-》链接器-》命令行-》/force  强制系统忽略此错误来解决。不管如何至少解决了这个错误。

                                                                                                                                                                                                                                                                                                                           ithzhang

                                                                                                                                                                                                                                                                                                                        2012.4.7下午

                                                                                                                                2012.4.18补充

 

 

 

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值