刚开始学习用VC++调用matlab生成的DLL,找了网上一些资料,难以找到vs2008与MATLAB2009b版本的,按照以往版本做的总是有很多错误。经过两天努力,终于调试成功,这里将经验总结一下,以供有需要的人们参考。 实验环境: Win7 MATLAB 2009b(安装路径:E:\Program Files\MATLAB\R2009a) VS2008 中文版(安装路径:E:\Program Files\Microsoft Visual Studio 9.0) 1.Matlab 生成DLL1.1编译器的安装在matlab中先安装编译器,我在第一次安装的时候一路y下来,只有一个compiler,还是最老的。这教育我们要学会说N,按照以下步骤操作 >> mbuild -setup Please choose your compiler for building standalone MATLAB applications:
Would you like mbuild to locate installed compilers [y]/n? n
Select a compiler: [1] Lcc-win32 C 2.4.1 [2] Microsoft Visual C++ 6.0 [3] Microsoft Visual C++ .NET 2003 [4] Microsoft Visual C++ 2005 SP1 [5] Microsoft Visual C++ 2008 Express [6] Microsoft Visual C++ 2008 SP1
[0] None
Compiler: 6
The default location for Microsoft Visual C++ 2008 SP1 compilers is C:\Program Files\Microsoft Visual Studio 9.0, but that directory does not exist on this machine.
Use C:\Program Files\Microsoft Visual Studio 9.0 anyway [y]/n? n Please enter the location of your compiler: [C:\Program Files\Microsoft Visual Studio 9.0] e:\Program Files\Microsoft Visual Studio 9.0 (红色部分换成你的vs所安装的地址) Please verify your choices:
Compiler: Microsoft Visual C++ 2008 SP1 Location: e:\Program Files\Microsoft Visual Studio 9.0
Are these correct [y]/n? y
**************************************************************************** Warning: Applications/components generated using Microsoft Visual Studio 2008 require that the Microsoft Visual Studio 2008 run-time libraries be available on the computer used for deployment. To redistribute your applications/components, be sure that the deployment machine has these run-time libraries. ****************************************************************************
Trying to update options file: C:\Users\Administrator\AppData\Roaming\MathWorks\MATLAB\R2009a\compopts.bat From template: E:\PROGRA~1\MATLAB\R2009a\bin\win32\mbuildopts\msvc90compp.bat
Done . . .
1.2 DLL的生成首先新建一个m文件,文件名为myadd2.m,定义了一个名为myadd2的函数,代码如下: ////////////////////////////////////////////////////// function [y,z] = myadd2(a, b) ///////////////////////////////////// 在MATLAB命令框中输入以下命令: mcc -W cpplib:libmyadd2 -T link:lib myadd2.m
生成libmyadd2.lib, libmyadd2.h, libmyadd2.dll 等文件,将这三个文件拷到VS的项目目录下
2. VS调用DLL2.1 新建一个项目,并设置环境新建一个win32 控制台应用程序,我取的名字是matlabDll2.当然新建其他的项目类型也可以,我这只是个例子。接下来进行配置,在该项目的属性中进行了配置,只对该项目有效。若建新的项目需要重新配置。项目建好后将libmyadd2.lib, libmyadd2.h, libmyadd2.dll拷贝到项目目录下。 首先配置项目属性页/配置属性/C-C++/常规/附加包含目录,请根据自己电脑上软件的安装位置对照设置,2008与2005不同的地方时这里要加两个目录,如下图所示: 其次配置项目属性页/配置属性/链接器/常规/附加库目录,请根据自己电脑上软件的安装位置对照设置,如下图所示: 然后配置项目属性页/配置属性/链接器/输入/附加依赖性,填入libmyadd2.lib mclmcrrt.lib mclmcr.lib ,如下图所示: 在这一步俺可吃了大苦头了,有篇文档只说添加前两项,俺就照做了,结果导致运行失败,找了好长时间也没发现错误,两天的功夫都在找,结果就是因为少填了这一项,还有其他的一些包含lib,比如libmex.lib libmx.lib ,这里没填,好像是VC6上要配的。 配置到此结束 2.2 编写主程序,调试运行这段代码是从别处拷来的,是一段完整代码,将它粘到matlabDLL2.cpp 主CPP文件中,调试通过: ////////////////////////////////////////////////////////////////////////////////// #include "stdafx.h" ///////////////////////////////////////////////////////////////////////////// 运行结果如下图: 问题我将代码的标红部分注释掉了,否则会出现错误: 1>c:\users\administrator\documents\visual studio 2008\projects\matlabdll2\matlabdll2\matlabdll2.cpp(14) : error C3861: “mclInitializeApplication_proxy”: 找不到标识符 我不知道为什么,大家在调试的过程如果解决了这个问题,麻烦告诉一声:liufengjk_ok@126.com。 致谢感谢taohe等网友提供的参考! |
|