我的一个应用程序(EXE)在运行时不能正确地动态调用VI文件
主要软件:
主要软件版本: N/A
主要软件修正版本: N/A
次要软件: LabVIEW Development Systems>>LabVIEW Base Package, LabVIEW Development Systems>>LabVIEW Professional Development System
问题: 我建立的一个应用程序使用了插件技术,也就是说我可以在该应用程序运行的时候动态地调用一些可能在以后建立的VI。这个应用程序在LabVIEW开发环境下可以正确运行,但是当编译成可执行程序运行时,有些被调用的VI从不执行,还有一些VI报告“VI not executable error”的错误。为什么?
解答: 这种错误一般会在当一个被动态调用的VI无法执行的时候发生,其原因很有可能是被动态调用的VI本身包含一些子VI,而VI Server在可执行程序运行时无法定位这些子VI。例如,当被动态调用的VI使用了在vi.lib里的子VI时(比如Simple Error Handler.vi),您必须告诉调用者(可执行程序)这些子VI的位置,而这在LabVIEW集成开发环境中是不需要的,因为vi.lib的路径已经被指定为VI搜索路径(在
Tools»Options»Paths»VI Search Path)。请使用下面列出的方法的其中一种来解决这个问题:
- 方法 1:将这些子VI包含在被动态调用的VI的相同的目录下
将这些子VI保存在与被动态调用的VI相同的目录下。您甚至可以把所有子VI放在与被动态调用的VI相同的目录下,因为缺省的VI搜索路径就是应用程序的目录及其子目录。请注意:如果这些子VI本身也调用了子VI,那您必须把这些子VI也保存在该子目录下。
- 方法 2:将被动态调用的VI保存成一个LLB库文件
通过以下方法把被动态调用的VI保存成LLB:File»Save with Options»Application Distribution。这样,所有这个VI用到的子VI(包括在vi.lib中的VI)都会被自动的保存在这个LLB库文件里。
- 方法 3:将被动态调用的VI作为唯一的顶层VI与所有子VI一起保存成一个LLB库文件
该方法实际上是将方法1和方法2结合起来,首先将您的顶层VI按正常的方式保存(比如说,MyVI.vi),然后将这个VI按方法2保存(比如说,MyVI.llb),这实际上是建立一个叫做MyVI.llb的、包含了所有子VI的子目录。 请注意:这个MyVI.llb同时也包含了您的顶层VI(MyVI.vi)的一个拷贝,但是这个对整个问题没有任何影响,当然您也可一通过Tools»Edit VI Library删除这个拷贝。
- 方法 4:直接指定可执行程序中调用的子VI的搜索路径
如果您的可执行程序所动态调用的VI包含了子VI,您可以为可执行程序直接指定这些子VI(比如说,vi.lib)的搜索路径。您在可执行程序的.ini文件中添加以下的语句实现该功能:
viSearchPath="C:\Program Files\National Instruments\LabVIEW \vi.lib ; C:\AnotherDirectory ; etc."
请注意:您可以通过下面列出的相关链接来获得更多的关于改变可执行程序的VI搜索路径的信息。
相关链接: KnowledgeBase 3HKEK93U: How Can I Change or Set the VI Search Path for LabVIEW Executables?
附件:
报告日期: 05/24/2006
最近更新: 05/28/2006
文档编号: 3LBHGHZH
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.