Labview_DLL调用指南

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

在LabVIEW中调用DLL的整个过程及注意事项2011-09-1521:25:44|分类:驱动开发|标签:|字号大中小订阅1.LabVIEW支持的数据类型xmlnamespaceprefix=ons=urn:schemas-microsoft-com:office:office/另外,可参考…\ProgramFiles\NationalInstruments\LabVIEW2009\examples\dll\datapassing\CallNativeCode.llb\CallDLL.vi。‘此VI列举了LabVIEW与C语言中兼容的数据类型。见下表。2.在VI里调用DLL时,在DLL的左侧给输出端口添加初始化的值。给输出端口添加初始化值的目的是分配内存给输出端口。该初始化数组元素的个数至少为实际输出数组的个数。若过小,则DLL不正常运行;若相等,则DLL正常运行;若过大,则DLL的数组输出端口除有效数据外,还有其他一些为0的非有效数据。xmlnamespaceprefix=vns=urn:schemas-microsoft-com:vml/3.使用DLL的步骤1)制作子VI,添加控件接口到连接端(connector)。2)在新建的VI中添加DLL,在DLL中指定其路径,会自动添加该DLL包含的输入输出端口。对于数值型输出,选择Pointtovalue。选中“Specifypathordiagram”,表示动态调用该DLL,此时路径取决于最上端的路径输入端,Librarynameorpath里输入的路径无效。在parameters页,系统会自动添加DLL的输入输出端口,如果添加不完整,则需要再手动添加额外的输入端或者输出端。需检查DBL输入:Value;DBL输出PointertoValue。3)务必给DLL的每个输出端添加初始值,否则DBL数组没有输出。len、len2分别为输入数组、输出数组的个数,需将这两个参数设置为与实际的数组大小一致。4)C调用,具体为什么选择C调用,可参考:Callingconvention用于指明被调用函数的调用约定。这里只支持两种约定:stdcall和Ccall。它们之间的区别在于,stdcall由被调用者负责清理堆栈;Ccall由调用者清理堆栈(在LabVIEW中调用该DLL,则选择C调用)。这个设置错误时,可能会引起LabVIEW崩溃,所以一定要小心。反过来说,如果LabVIEW调用DLL函数时出现异常,首先就可以考虑这个设置是否正确。(WindowsAPI一般使用的都是stdcall;标准C的库函数大多使用Ccall。如果函数声明中有类似__stdcall这样的关键字,它就是stdcall的。)具体链接为:=255&extra=&page=9另外,也可以这样理解。对库函数的调用规则,选择stdcall。比如调用凌华的数据采集卡驱动提供的DLL,则选择stdcall调用规范。调用自己用C语言写的程序而后编译成DLL文件时,调用规范选择“C”。5)选择哪种线程?选择RuninUIthread,具体为什么选择该界面线程(RuninUIthread),可参考如下链接:)如果动态调用,则必须设置调用DLL的那个VI。设置该VI的执行系统不能够为“UserInterface”。如果是静态调用,则可不用设置该项。关于调用DLL导致LabVIEW崩溃的解决办法,可参考如下链接:生成DLL的两种方式1).LabVIEW环境不过多赘述。在DLL和LabVIEW之间传递参数,最常用的三种数据类型是:数值类型、字符串、数值型数组。2)VC等环境以VC环境为例,参考一个例子解释:此例子讲述了如何在VC中建立DLL,以及如何在VC中使用DLL。5.动态链接库1)静态库和动态库静态库:函数和数据被编译成一个二进制文件(一般为LIB格式),在使用静态库编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其他的模块组合起来创建最终的可执行文件(EXE文件)。动态库:在使用动态库时,往往提供两个文件:引入库(.lib)和一个DLL(.dll)文件。该引入库不同于静态库,因为引入库文件包含了该DLL导出的函数和变量的符号名,而.dll文件包含该DLL实际的函数和数据。在使用动态库编译链接可执行文件时,只需要链接该DLL的引入库文件,该DLL中的函数代码和数据并不复制到可执行文件中,直到可执行程序运行时,才去加载所需的DLL。2)使用动态链接库的好处动态链接库通常不能直接运行,也不能接收消息。它们是一些独立的文件,其中包含了能被可执行程序或其他DLL调用来完成某项工作的函数。只有在被调用时,才被载入内存。如果多个应用程序同时调用该DLL,则在内存中只需载入一次,从而避免多个应用程序调用相同DLL时内存资源的浪费。

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功