DSPEA算法是在Visual Studio.NET 2003平台上实现的,调用仿真软件前,需要进行一些环境变量设置以便能够成功调用MATLAB引擎。以Visual Studio 2003为例(高级版本中的设置与此类似),设置过程包括以下几个步骤(生成程序均指32位的):
1.设置头文件目录
打开开发环境后,单击“工具”选项卡,然后选择此选项卡下的“选项”,此时将弹出图7-5所示的窗口。单击此窗口中组织树的“项目”项(有些版本中显示为“Projects”),选择此项下的“VC++目录”项;之后在图中右上部分的下拉框中选择“包含文件”。选择好后,单击图中右上部分下拉框下面的新行插入图标新增加一行,然后在其中写入目标文件engine.h所在目录,即MATLAB安装目录下的\extern\include路径。本研究中,目标文件所在的目录为“F:\backupofsoft\usefulsoft\Matlab6p5FULL\extern\include”。设置好后单击“确定”按钮退出对话框保存设置。
2.设置库文件目录
在图7-5所示的窗口中,选择“VC++目录”,在图中右上部分的“显示以下内容的目录”下拉框中选择“库文件”。选择好后,单击图中右上部分的新行插入图标新增加一行,然后在其中写入目标库文件libeng.lib和libmx.lib所在目录,即MATLAB安装目录下的extern\lib\win32\microsoft\msvc70路径。本研究中,目标文件所在目录为“F:\backupofsoft\usefulsoft\Matlab6p5FULL\extern\lib\win32\mi-crosoft\msvc70”。设置好后单击“确定”按钮退出对话框保存设置。
3.设置链接库输入项
在解决方案资源管理器里选择对应的项目,单击右键选择最下面的“属性”弹出属性对话框窗口(见图7-6)。在左侧的树形目录中依次选择“配置属性”→“链接器”→“输入”,最后在右边“附加依赖项”那一项加上“libeng.lib”和“libmx.lib”。完成后单击“确定”按钮保存设置。在这个增加的过程中,依赖项之间用空格隔开,不要删除原有的依赖项。
图7-5 Visual Studio 2003中设置头文件的窗口
图7-6 链接库输入项窗口
4.设置环境变量
在系统环境变量Path中增加目录“MATLAB安装目录\bin\win32”。本研究中增加的目录为“F:\backupofsoft\usefulsoft\Matlab6p5FULL\bin\win32”。在Win7系统中具体可以这样做:在桌面上选择“计算机”图标,单击右键弹出菜单,在其中选择“属性”,然后在弹出的窗口中单击左侧的“高级系统设置”,在属性对话框里选择“高级”选项卡,然后选择“环境变量”,在新对话框里的“系统变量”中选中“Path”项,单击“编辑”按钮,在“变量值”中添加上述目录即可。
特别需要说明的是:
1)如果设置环境变量前打开了Visual Studio,那么需要重启Visual Studio。
2)有可能在按上述步骤设置后,使用时会有“找不到库文件”、“无法解析的外部符号_mxDestroyArray”等错误提示,引起这个问题的原因是:不同版本的目标文件所在目录会有区别,解决的办法是:通过查找来找到前文中提到的“engine.h”文件所在目录,同时库文件的包括目录同样可以通过查找来找到。但是它们都应该在extern下面的目录。
3)有些系统中,需要在系统变量Path中增加MATLAB安装目录下bin及bin下面的win32目录,否则将提示找不到libeng.lib。
进行上述设置后,运用C++编程就可以调用MATLAB的引擎了。在engine.h中,提供了需要用到的接口函数:
1)执行MATLAB语句的方法
(www.xing528.com)
当函数的返回值为0时,表示引擎成功处理了用户的指令。在使用此函数时,必须保证需要执行的语句没有错误。
2)开始一次使用MATLAB过程
3)打开MATLAB进程
在Windows平台上,输入参数只能为NULL。当此函数执行成功时,一个MATLAB进程作为后台服务启动,同时返回引擎的指针。
4)关闭MATLAB服务
此函数的输入参数为使用打开函数返回的引擎指针,其功能是关闭引擎后台服务进程,执行成功返回整数0。
5)从MATLAB会话中获得指定变量的值
如果读取数据成功,则返回一个maArray数据类型的对象指针。
6)将一个变量写入到MATLAB会话中特定变量
var_name是指MATLAB会话中的变量名,在使此函数前,需要在C++中创建一个数据类型为maArray的对象指针。如果写入数据成功,则返回值为0。
7)为MATLAB引擎输出设置一个缓冲区
8)此外还有将数据存入MATLAB引擎的EngPutArray函数、从MATLAB引擎中取出数据的函数engGetArray等。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。