利用获取当前VI路径函数时获得相对路径,如果生成exe时,该如何解决虚拟路径问题
主要软件:
主要软件版本: 2011
主要软件修正版本: N/A
次要软件: N/A
问题: 利用“获取当前VI路径函数”[Current VI's Path] 时获得相对路径,如果生成可执行文件时,该如何处理虚拟路径问题,使得文件能被正常的加载?
解答: 利用“获取当前VI路径函数”时,在LabVIEW开发环境下,函数返回VI的实际路径,我们可以在此基础上通过计算路径来加载其它文件。例如函数返回某个VI的路径C:\Test\main.vi,但是当生成exe时,我们得到的有可能是C:\Builds\*.exe\ main.vi(这个根据生成规范中目标目录的实际设置会有不同,*.exe是可执行文件的名称)。因此,我们就需要从这个虚拟路径中跳出来。但有时候我们会发现只是简单的去掉exe,我们还是有可能遇到各种各样的问题。比如动态加载时路径的处理、Build中的always include选项、如果工具包函数无法加载的话怎么办等等。
这里我结合一个例子来说明几点心得:
我们把项目文件拷到C盘根目录(只是为了计算路径方便),项目的组织层次如下:
项目结构和文件调用关系
Launch.vi动态调用main.vi,main.vi动态调用subpanel-dynamic.vi,subpanel-dynamic.vi加载wav文件。
1)如果main.vi是always include,那么默认该VI在虚拟文件夹中 (Application.exe) ,launch.vi动态调用main.vi时的路径计算不需要特别处理,和开发环境下一致就可以了;但是如果main.vi没有always include,则需要处理,否则不能正常加载。在附件的项目文件中,我们将main.vi添加到always include栏中,launch.vi不需要对路径做预处理。
如果main.vi没有always include,则不处理路径的话是无法加载
2)如果main.vi中动态加载subpanel-dynamic.vi是通过”Current VI's Path函数”计算路径的,在main.vi中处理,跳出虚拟文件夹后,后续的更深层的subpanel-dynamic.vi再次调用”Current VI's Path函数”时就直接获得真实的路径,即只需要跳出一次即可!
只需要一次跳出虚拟路径
3)main.vi通过子面板加载subpanel-static load.VI,subpanel-static load.vi中调用了工具包或驱动。如果subpanel-static load.vi是动态加载的,则会出现找不到的工具包或驱动中的函数而导致subpanel-static load.vi无法运行。解决的办法是静态加载subpanel - static load.vi。(注意,只要在程序的任何地方静态加载了该VI,都会有效)
subpanel-static load.vi的框图中放置了一个声音振动工具包函数
相关链接: Why Does My Executable Not Work When Using the Current VI's Path Constant?
附件: file path - subpanel.rar
报告日期: 12/14/2011
最近更新: 01/05/2013
文档编号: 5SD4CE7K
Other Support Options
Ask the NI Community
Collaborate with other users in our discussion forums
Request Support from an Engineer
A valid service agreement may be required, and support options vary by country.