LabVIEW编程调用DLL时遇见的问题
关于LabVIEW产生的DLL被C调用的问题

关于LabVIEW产生的DLL被C调用的问题1 LabVIEW的工作1.1 工程项目从LV8.0开始,想要生成exe、安装程序或DLL就必须首先创建1个工程,然后把所有有关的VI全部添加到工程中,如图1:图1 LV项目为了使目录结构清晰,最好把最后需要输出的VI放置在一起,把子VI放置在一起,如图1中,虚拟目录Top Level Vis用来存放3个输出的VI(可以把它想像成DLL中的函数)、虚拟目录Dynamic Vis存放子VI、虚拟目录Support Files存放支持文件(位图、光标等)。
1.2 VI设置如同在LV中一样,有些VI完全是作为计算模块使用的(调用时不会弹出界面,如图1中的acquire.vi、analyze.vi),而有些是用来显示界面的(调用时弹出对话框,如图1中的present.vi)。
那么如何设置1个输出VI是否显示界面呢?想要产生界面调用的函数,请配置Window Appearance(如图2),然后确保红线圈住的地方必须被选中:图2 VI界面设置1.3 输出配置(Build Specification)右击Build Specification选择New->DLL,弹出DLL输出配置对话框,其有以下对话框需要配置:1.3.1 基本信息(Information)图3∙Build specification name—指定唯一的生成模板名称(出现在项目管理页面中),用以和其他模板相区别∙Target filename—指定输出的DLL名称∙Destination directory—指定生成文件的输出路径∙Build specification description—描述该生成模板的相关信息。
1.3.2 输出源指定(Source Files)图4∙Project Files窗口—显示项目窗口My Computer下列举的项目(如图1),使用图4中的左/右箭头可将My Computer下列举的项目移入/移出Exported VIs和Always Included窗口。
LabVIEW程序调试与错误处理技巧

LabVIEW程序调试与错误处理技巧在LabVIEW编程中,调试和错误处理是非常重要的环节。
有效的调试和错误处理技巧能够提高程序的稳定性和可靠性,减少代码中的Bug。
本文将介绍一些LabVIEW程序调试与错误处理的技巧,帮助程序员更好地处理错误和调试程序。
一、使用面板控件和指示灯进行调试LabVIEW提供了丰富多样的面板控件和指示灯,可以用于调试程序。
通过在面板上添加控件,可以实时查看程序中关键变量的数值,并对其进行调试。
例如,可以添加数字显示控件来显示循环变量的数值,或者添加开关控件来模拟用户输入。
同时,LabVIEW还提供了各种指示灯,用于显示程序的状态。
例如,可以使用LED灯来表示程序是否正常运行,或者使用警示灯来表示错误的发生。
通过利用这些面板控件和指示灯,可以实时观察程序运行过程中的状态变化,帮助定位问题和调试程序。
二、使用数据流监视器LabVIEW的数据流监视器是一个非常有用的工具,可以在运行程序时实时监视数据的传输和处理过程。
通过在Block Diagram上引入数据流监视器,可以查看数据在不同节点之间的传输情况,帮助分析数据处理的逻辑和流程。
数据流监视器还可以用于检测数据处理中的错误和异常情况。
例如,可以将数据流监视器设置为在数据溢出或越界时触发警报,及时发现潜在的问题。
通过合理使用数据流监视器,可以快速定位程序中的错误并进行修复。
三、使用断点调试LabVIEW提供了强大的断点调试功能,可以在程序的任意位置设置断点,并在运行过程中暂停程序,以便进行调试。
通过设置断点,可以观察程序在断点位置的变量数值、数据流以及程序状态的变化。
在进行断点调试时,可以利用LabVIEW的调试工具,逐步执行程序的每个节点,一步一步地跟踪程序的执行过程。
如果程序在某一节点处出现问题,可以通过观察变量的数值变化以及数据流的传输情况,找到错误的源头并进行修复。
四、使用错误处理模块LabVIEW提供了丰富的错误处理模块,可以帮助程序员处理异常和错误情况。
LabVIEW与外部程序间DLL文件的调用

LabVIEW与外部程序间DLL文件的调用什么是DLL文件DLL(动态链接库)文件是Dynamic Link Library的缩写形式,是一种允许程序共享执行特殊任务所必需的代码和其他资源的可执行文件。
其多数情况下是带有DLL扩展名的文件,但也可能是EXE或其他扩展名。
Windows提供的DLL文件中包含了允许基于Windows 的程序在Windows环境下操作的许多函数和资源。
动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。
这些函数的可执行代码位于一个DLL中,该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。
DLL还有助于共享数据和资源,多个应用程序可同时访问内存中单DLL副本的内容。
总之,DLL是一个包含可由多个程序同时使用的代码和数据的库。
动态链接是相对于静态链接而言的。
所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。
换句话说,函数和过程的代码就在程序的exe文件中,该文件包含了运行时所需的全部代码。
当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。
而动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息(往往是一些重定位信息)。
仅当应用程序被装入内存开始运行时,在Windows的管理下,才在应用程序与相应的DLL之间建立链接关系。
当要执行所调用DLL中的函数时,根据链接产生的重定位信息,Windows才转去执行DLL中相应的函数代码。
由于向运行于Windows操作系统下的程序提供代码、数据或函数,程序可根据DLL文件中的指令打开、启用、查询、禁用和关闭驱动程序。
在Windows操作系统中,DLL对于程序执行是非常重要的, 因为程序在执行的时候, 必须链接到DLL文件, 才能够正确地运行。
而有些DLL文件可以被许多程序共用,因此程序设计人员可以利用DLL文件, 使程序不至于太过巨大。
LabVIEW 8.6报表工具包生成和调用DLL问题分析及对策

LabVIEW 8.6报表工具包生成和调用DLL问题分析及对策摘要:针对LabVIEW8.6调用报表工具包生成的DLL过程中出现“NI_Word.lvclass”路径无法找到的问题,做了详细描述和分析,并提供了相应的解决方案。
关键词:LabVIEW 8.6 Word 动态链接库报表工具包面向对象LabVIEW是美国国家仪器(NI)公司推出的专门用于虚拟仪器开发的图形化软件编程平台,吸引了大批开发者追随,NI也根据市场需求每年推出一个新版本。
但新技术的引用不可避免的也带来了新的问题和BUG,尤其是升级后,很多硬件驱动不得不更新。
LabVIEW 8.6版本是NI推出的所有版本中,大部分用户公认比较成熟稳定的版本。
NI 报表工具包从1.1.3开始采用面向对象技术,重新设计,1.1.3和1.1.4版本是专为LabVIEW 8.6而定制使用的,而以前的版本如1.1.1、1.1.2(面向过程技术)在LabVIEW 8.6下与自带的Report函数不兼容。
1 问题描述应用开发环境以及报表工具包版本:LabVIEW 8.6 + Report Generation Toolkit 1.1.3。
在LabVIEW 8.6新建工程项目文件,并按照图1和图2建立相应的VI和文件。
当运行main.vi或Main.exe时,出现下面(图3)报错框。
而单独运行1.vi或1.exe时,却能正常运行。
2 问题分析根据问题报错框描述,问题可能出现在“Get LV Class Default Value.vi”的上一层文件“Word class path.vi”传递出的NI_Word.lvclass 路径,图4为报表工具包自带的“Word class path.vi”程序框。
利用LabVIEW自带诊断和调试工具,可获得“Word class path”显示的文件路径,如表1所示。
(1)当运行main.vi时,由于是“Develo- pment system”环境下,根据路径的分离规则,“NI_Word.lvclass”文件路径应在当前DLL文件的下层目录,并且布尔量选择为False,即“..\1.dll\word\ NI_Word.lvclass”。
35.LabVIEW 代码中常见的错误

LabVIEW 代码中常见的错误发现了程序的问题再回头去调试,在查找程序错误时就不可避免地要花大量时间。
要调高开发效率,最好是在编写代码时就避免一些常见的低级错误,这样可以节约大量的调试时间。
有些编程错误差不多是每个LabVIEW 程序员都曾遇到过的。
在编写相关代码的时候,对这些问题多留心一下,就可以大大减少调试时间。
1. 数值溢出图1:数值溢出错误图1 中的VI 只做了一个简单乘法300*300 ,不加思索就应该知道答案是90000,但程序中乘法节点给出的结果却是24464。
乘法节点是不会错的,错误是由于程序中使用的数据类型是I16。
I16 能表示的最大数目只有32767,所以在乘法计算中出现了溢出。
避免此类错误的方法是,在程序中使用短数据类型时,一定要确认程序中的数据绝不会超出该类型可以表示的范围。
2. For 循环的隧道循环相关的介绍可以参考《循环结构》。
数据传入传出循环结构可以通过移位寄存器(Shift Register)和隧道(Tunnel)两种方式。
隧道又有两种类型:带索引的和不带索引的。
移位寄存器一般用在需要局部变量的情况下,循环运行一次的输出数据要作为下次运行的输入数据使用;循环外的数组数据通过带索引的隧道在循环体内就可以直接得到数组元素;除此之外,简单地在循环内外传递数据,使用一般的隧道就可以了。
值得一提的是,如果一个数据传入循环体,又传出来,那么就应该使用移位寄存器或带索引的隧道来传递这个数据,尽量不要使用不带索引的隧道。
因为For 循环在运行时,循环次数有可能为0。
在循环次数为0时,大多数情况,用户还是希望传出循环的数据就是传入值,但使用不带索引隧道时,输入值有时会被丢失的。
如果使用移位寄存器,即使循环次数为0,也不会丢失传入的数据。
因为移位寄存器在循环上的两个接线柱指向的实际是同一块内存,而输入输出两个隧道指向的是不同的内存,数据不一定相同。
图2:For 循环上的隧道图2中的程序,vi reference 传入,再传出循环均使用了隧道。
LabVIEW编程中常见问题与解决方法

LabVIEW编程中常见问题与解决方法LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一款广泛应用于科学与工程领域的视觉化编程环境。
它的独特之处在于,使用者可以通过拖拽和连接图形化编程元素来构建程序,而无需编写传统的文本代码。
然而,由于其特殊的编程方式和复杂的功能,LabVIEW编程过程中常常会遇到各种问题。
本文将介绍LabVIEW编程中常见问题,并提供相应的解决方法。
一、VI无法运行1. 问题描述:当尝试运行一个VI(Virtual Instrument)时,LabVIEW出现错误或者无响应。
解决方法:- 检查是否安装了适当的软件环境(如运行时引擎或特定模块)。
- 检查VI中使用的所有子VI或函数是否被正确地调用或配置。
- 检查是否有硬件设备连接问题或者相关设备驱动是否正确安装。
二、数据处理错误1. 问题描述:LabVIEW在执行数据处理操作时,产生了错误的结果或者没有得到期望的结果。
解决方法:- 检查数据的输入是否正确,并确保正确配置了对应的数据类型。
- 检查数据处理模块的参数设置,例如滤波器的截止频率或者函数的操作参数。
- 使用适当的数据结构和算法,以确保正确的数据处理过程。
- 进行调试,并通过添加数据显示或打印变量值等方式进行验证。
三、界面设计问题1. 问题描述:LabVIEW的用户界面显示效果不如期望的那样美观或者布局混乱。
解决方法:- 使用合适的面板布局工具和控件,确保界面的整洁美观。
- 使用适当的颜色和字体,以提高界面的可读性和用户体验。
- 充分利用丰富的LabVIEW组件库,添加图标、按钮和指示器等交互元素。
- 进行界面的测试和优化,以提高界面的响应速度和用户友好性。
四、性能问题1. 问题描述:LabVIEW程序在运行过程中出现了延迟、卡顿或者响应速度较慢的情况。
解决方法:- 尽量使用并行编程技术,以提高程序的性能和效率。
labview无法加载MIFSystemUtility DLL

labview无法加载MIFSystemUtility DLL找了好久,在官网看到解决办法...Unable to Load MIFSystemUtility.DLL When Installing Via NI Package Manager - NI问题原因:This error could have different root causes depending on what software you have installed (or uninstalled) previously. If you have previously uninstalled NI software, this error can be causedby corruption in the unintstall process, failing to remove the appropriate registry keys. This does not cause any problems until software must be reinstalled and certain registry values are not set as expected.此错误可能有不同的根本原因,这取决于您以前安装(或卸载)的软件。
如果您之前已经卸载了NI软件,则此错误可能是由于卸载过程中的损坏导致的,未能删除适当的注册表项。
这不会导致任何问题,直到必须重新安装软件并且某些注册表值没有按预期设置。
简单一句话,之前安装过的注册表值有问题,需要删除,才可重新安装解决办法:To solve this error, you must manually delete the MIFSystemUtility registry key.1.Open the Registry Editor. (In Windows 10,type regedit into the search bar andpress Enter).2.Navigate to the following registry key:Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW\National Instruments\Common\Installer\MIF\MIFSystemUtility3.Right click the key MIFSystemUtility key in theand click Delete.After deleting the registry key, you should be able to install the software without error.删除后,秒解决...。
LabVIEW中的错误处理和调试技巧

LabVIEW中的错误处理和调试技巧在LabVIEW中的错误处理和调试技巧LabVIEW是一种用于实验室和工业自动化的可视化编程语言,开发人员在软件开发过程中可能会遇到各种各样的错误。
本文将介绍一些在LabVIEW中处理错误和调试的技巧,帮助开发人员提高工作效率。
一、错误处理技巧1. 引入错误处理结构在LabVIEW中,使用错误处理结构是一种常见的处理错误的方法。
此结构可以将产生的错误通过错误输入和错误输出传递,方便开发人员捕获、处理和传递错误。
2. 调用错误代码LabVIEW提供了许多内置的错误代码函数,它们可以帮助开发人员获取更详细的错误信息。
通过调用这些函数,开发人员可以快速定位问题所在,并采取相应的措施解决错误。
3. 使用适当的错误处理方法在处理错误时,可以根据具体情况选择适当的错误处理方法。
例如,可以通过选择Resume、Abort或Continue来决定在发生错误时程序的行为。
这取决于开发人员对错误的处理需求和对程序运行的影响。
二、调试技巧1. 使用断点调试在LabVIEW中,可以通过在代码中设置断点来进行调试。
当程序执行到断点处时,可以暂停程序的运行,查看和分析变量的值以及代码的执行情况。
这有助于开发人员快速定位错误和调试代码。
2. 使用Probe和Indicator在LabVIEW界面中的Probe和Indicator可以实时显示变量的值。
通过在代码中设置Probe或Indicator,可以跟踪变量的值的变化,并观察其与预期值的差异。
这对于检查程序逻辑和数据流是否正确非常有帮助。
3. 日志记录日志记录是一种常见的调试技巧,可以在程序运行过程中记录和输出关键信息。
通过在代码中插入适当的日志记录功能,可以帮助开发人员了解程序的执行情况,从而更好地判断问题所在。
4. 避免过度依赖调试工具调试工具是开发人员调试程序的重要辅助工具,但是过度依赖调试工具可能会导致开发过程变得低效。
因此,在调试过程中应该根据实际需求合理使用和深入理解调试工具的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LabVIEW编程调用DLL时遇见的问题
对于使用LabVIEW编程的人来说,都知道LabVIEW功能强大,但也会发现似乎缺少某些功能,而像其他编程语言的DLL、ActiveX组件则能提供。
在使用DLL(动态链接库)时,最大的困难就是把函数参数的数据类型映射为相应的LabVIEW中的数据类型。
LabVIEW 提示:
未定义符号可能会造成函数和参数无法被识别。
如要解决该问题,检查头文件并确定是否必须添加预定义符号。
单击上一步按钮返回至向导的前一页并添加预定义符号(例如,"NIAPI_stdcall = __stdcall"或"NIAPIDefined = 1")在一次进行串口调试软件的编写过程中,要求使用动态链接库(其实使用VISA同样可以实现),使用导入共享库工具以自动生成配置CLN(Call Library Function)节点,工具在“工具—导入—共享库(.dll)”菜单项下,专门用于将DLL 中函数包装成VI。
下一步下一步点击解析头文件后,依然遇见(如下图)
extern UINT Recv(UCHAR *pRecvBytes,UINT unRecvLength);(函数原型)
未定义符号可能会造成函数和参数无法被识别。
如要解决该问题,检查头文件并确定是否必须添加预定义符号。
单击上一步按钮返回至向导的前一页并添加预定义符号(例如,"NIAPI_stdcall = __stdcall"或"NIAPIDefined = 1")
归咎原因就是头文件中的一些类型定义不符合标准C语法,而使解析器无法获得正确的的mPWIN32_COMMAND定义。
DLL函数的头文件中可能使用了某个系统定义的数据类型,数据类型的定义在windows.h中,(windows.h是Windows SDK的一个文件,VC等开发环境中常常带有Windows SDK),要正确解析必须得到这些数据类型,也就是找到windows.h 这个头文件,用户须把windows.h文件的全路径加在“包括路径”中。
例如Visual C++6.0编译环境中头文件位于安装目录下VC98文件夹下的Include文件中。
而“预处理定义”中,当用户需要写一些宏定义,那么就写在这个位置。
在网络上看到在预处理定义中添加了如下代码
ULONG = unsigned long; VOID = void; LONG = long; UCHAR = unsigned char; PUCHAR = unsigned char*; PULONG = unsigned long*; WINAPI; BOOL = bool; USHORT = unsigned short; PUSHORT = unsigned short*;
点击下一步也不会遇到上述问题,导入工具会帮助你解析出全部导出函数并自动生成VI。
在安装LabVIEW的user.lib文件夹下就会找到各个函数的VI。
LabVIEW自带一个用于演示的示例,D:\Measurement studio\LabVIEW 8.6\examples\dll\regexpr\Import Shared Library Tutorial GUI.vi(假设LabVIEW安装于D盘目录下),用户可以打开示例自行学习这个工具。