LabVIEW调用动态链接库dll
- 格式:pdf
- 大小:296.54 KB
- 文档页数:6
利用LabView调用动态链接库.dll
2013.10蜗牛首先确定要实现的功能:
例如:实现c=a+b;动态库的功能是完成加法运算;
第一部分:生成dll库文件的工程;
1)利用vs2010或者VC++编译器建立一个可以生产动态库的工程,在文件》》新建》》项目,选择Visual C++下面的Win32的控制台运用程序;输入工程名和路劲;如图所示会在VC++的文件夹下建立一个test的文件夹;点击确定》》下一步;选择DLL;如下图所示
点击确定后;自动增加的函数文件如下图左边所示;蓝色阴影部分为自己增加的函数功能;
DLL内申明并定义函数的分为两种:第一种为DLL导出函数,第二种为DLL 为内部函数;其中DLL导出函数可以被其他函数调用,DLL函数只能被内部函数调用,应用程序无法调用他们。
所以在DLL中函数add之前有个关键字_declspec(dllexport)来限制,表示函数为dll导出函数。
然后在生成里面点击生成和编译;那么在所建的工程路劲的Debug文件夹下生产一个test.dll的文件;记住这个路劲;
第二部分:编写LabView程序
导出调用LabView调用动态库节点;放置到程序框图版;
双击程序框图中的图标,按如下所示设置,将路劲和函数名写好;在参数设置栏中根据我们在vc中设置的参数类型选择好,点击ok就行;
根据我们定义的a、b类型为int,编辑好界面后,运行程序,调用DLL完成。
1. dll文件的编写(1)打开软件Labwindows/CVI,点击File->New->project新建一个工程*.prj,如图所示。
然后保存为example.prj。
(2)用同样的方式,新建一个*.c文件,然后按照下图所示,在Edit->Insert Construct->Dllmain,然后软件会自动在c文件中添加以下两个函数:int __stdcall DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)int __stdcall DllEntryPoint (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)这两个函数是DLL动态链接库必须包含的两个函数,函数的具体内容为:#includeint __stdcall DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){switch (fdwReason){case DLL_PROCESS_ATTACH:if (InitCVIRTE (hinstDLL, 0, 0) == 0)return 0;/* out of memory */break;case DLL_PROCESS_DETACH:CloseCVIRTE ();break;}return 1;}int __stdcall DllEntryPoint (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){/* Included for compatibility with Borland */return DllMain (hinstDLL, fdwReason, lpvReserved);}然后在上面C源文件中编写相关的函数,然后保存文件为example.c。
【转】labview dll的调用【转载】武汉高收入高福利公司排行榜在LabVIEW中调用DLL的整个过程及注意事项2011-09-15 21:25:44| 分类:驱动开发| 标签:|字号大中小订阅1. LabVIEW支持的数据类型< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />另外,可参考…\Program Files\National Instruments\LabVIEW 2009\examples\dll\data passing\Call Native Code.llb\Call DLL.vi。
…此VI列举了LabVIEW与C语言中兼容的数据类型。
见下表。
2. 在VI里调用DLL时,在DLL的左侧给输出端口添加初始化的值。
给输出端口添加初始化值的目的是分配内存给输出端口。
该初始化数组元素的个数至少为实际输出数组的个数。
若过小,则DLL不正常运行;若相等,则DLL正常运行;若过大,则DLL的数组输出端口除有效数据外,还有其他一些为0的非有效数据。
< xmlnamespace prefix ="v" ns ="urn:schemas-microsoft-com:vml" />3.使用DLL的步骤1)制作子VI,添加控件接口到连接端(connector)。
2)在新建的VI中添加DLL,在DLL中指定其路径,会自动添加该DLL包含的输入输出端口。
对于数值型输出,选择Point to value。
选中“Specify path or diagram”,表示动态调用该DLL,此时路径取决于最上端的路径输入端,Library name or path里输入的路径无效。
在parameters页,系统会自动添加DLL的输入输出端口,如果添加不完整,则需要再手动添加额外的输入端或者输出端。
0.参考示例:LabVIEW1.调用库函数节点2.配置参数2.1.返回参数类型:有Void,Numeric和String三种,如下图所示。
(1)VoidVoid is only available for return type and is not available for other parameters. Use Void for the return type if your function does not return any values.Even if the function you call returns a value, you can use Void for the return type. When the function returns a value and you select Void as the return type, the value returned by the function is ignored.(2)Numberic(pointer-sized integer),以winpcap.dll为例,如下图。
另外数据类型中的“指针大小整型”帮助文档的解释如下:(3)String目前还没碰到过,等遇到时再补充。
2.2.输入(出)参数其类型共有9种,常用的有数值、数组、字符串和匹配值类型。
2.2.1.数值需要注意的是,其传递选项有“值”和“指针”两种,分别对应值传递和指针传递。
a. 数据类型为int32函数原型为void LVint32(int32 input, int32 *output);本函数计算输入值的平方,然后将结果显示在“输出”中。
返回类型为void,input类型为int32,值传递output类型为int32,指针传递注:如将结果返回至某个控件,该控件本身即可为返回数据提供必要的内存空间。
b. 数据类型为float64函数原型为void LVfloat64(float64 input, float64 *output);本函数计算输入值的平方,然后将结果显示在“输出”中。
Labview 下建立dll及其使用1、建立动态连接库的C代码调用1.1建立函数原形1)后面框图程序中,调用CLF节点;2)配置一个函数原形,比如long add2(long a,long b),设置调用规程为C,其它不变,确定,退出;3)右键CLF节点,create C file,保存名字为code.cpp,以供VC++编译使用;1.2 编辑源代码文件1)将所需要的labview头文件复制到code.cpp所在目录中,包括:extcode.h platdefines.h fundtype.h;2) 打开code.cpp,添加关键词extern “c”、_declspec(dllexport)并包装;然后输入函数的功能代码,如果1个dll里面需要多个函数,则需要声明多个函数的原形。
本例子采用了2个函数,add 和mult2./* Call Library source file */#include "extcode.h"extern "C"{_declspec(dllexport) long add2(long a, long b);_declspec(dllexport) long mult2(long a, long b);}_declspec(dllexport) long add2(long a, long b){/* Insert code here 加法*/return(a+b);}_declspec(dllexport) long mult2(long a, long b){return(a*b); /* 乘法*/}2、VC++中编译产生dll1)建立project ,file→new-> win32 Dyna,mic Link Library,输入工程名,选择an empty dll project;2)添加code.cpp到source file,添加extcode.h platdefines.hfundtype.h到head files里面;3)设置dll参数project→settings→c/C++中设置参数:category:code generation ;根据函数要求可以选择1Byte\4 Byte\ 8Byte,采用默认就可以;multithread;其余默认可以;自己也可以微调;4)Build Build code.dll;5)Ok!3采用Labview测试验证。
问题:如何从LabVIEW中调用动态链接库DLL解答:要从LabVIEW中调用动态链接库(DLL),你需要首先确定是哪种类型的DLL。
基本上有两种类型的DLL需要考虑:C/C++ DLL 和Microsoft .NET assembly. C/C++ DLL 用C, C++, 或其他编程语言生成(除了.NET 语言) 比如Java, Fortran, 或Visual Basic 6.0. .NET DLL 也被称为".NET assembly" 或者就是"assembly". 这个术语的区别在于.NET DLL 与其他DLL的工作方式不同. .NET DLL使用Common Language Runtime (CLR) 和.NET Framework "处理" DLL中的函数.如果DLL是C/C++ DLL:1找到头文件(*.h) 或者函数原型声明.2确定你需要调用的function(s) . 注意函数的参数是否包含了原始数据类型参数比如int, char, double, 等等或者是否包含了复杂数据类型比如clusters.3如果函数没有包含复杂数据类型并且你有头文件(*.h), LabVIEW中一个很好的工具可以帮你简单地导入DLL (并且会帮助你创建DLL的整个库). 你可以在Tools?Import?Shared Library (.dll)...中找到该工具; 按照向导进行下去.4如何函数不含有复杂数据类型但是没有头文件(*.h), 首先确定你使用的是C/C++ DLL因为大部分的编程环境将对这种DLL 生成头文件. 如果你确实在处理C/C++ DLL, 找到该函数的相关文档,因为你需要确定那些在DLL中被调用的函数的参数. 一旦参数被确定,使用Call Library Function Node LabVIEW中的函数手动调用该函数。
收稿日期:2009-10-13作者简介:苗立交(1980),男,硕士研究生,研究方向为智能仪器仪表。
基于LabVIEW 的动态链接库的设计与调用苗立交1,杨新华1,王巍2(1.兰州理工大学电气工程与信息工程学院,兰州730050;2.本溪供电公司,辽宁本溪117000)摘要:介绍了具有USB 通信接口的动态链接库设计方法,并通过实例阐述了动态链接库关键的设计技术和具体调用步骤。
实验证明动态链接库技术与LabVIEW 软件相结合的机制解决了USB 总线与LabVIEW 软件通信的问题,提高了数据传输效率。
关键词:USB ;CY7C68013;LabVIEW ;动态链接库中图分类号:TP334.4文献标志码:A 文章编号:1000-0682(2010)04-0071-03Design and call the dynamic link library based on LabVIEWMIAO Lijiao 1,YANG Xinhua 1,WANG Wei 2(1.College of Elec &lnfo Eng ,Lanzhou University of Technology ,Lanzhou 730050,China ;2.Benxi Power Supply Company ,Liaoning Benxi 117000,China )Abstract :The method of designing the USB communication interface dynamic link library is de-scribed.The dynamic link library key design techniques and specific steps in the call is explained by ex-amples.It is clear that the combined method of the dynamic link library technology and LabVIEW soft-ware resolve the communication problem between them.Key words :USB ;CY7C68013;LabVIEW ;dynamic link library0引言USB 总线因具有热插拔、即插即用、共享式接口、接口体积小、传输速度快的优点,所以越来越多的测试仪器采用USB 接口实现上位机与下位机通信。