如何从LabVIEW调用动态链接库DLL
labview调用动态库Dll
利用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完成。
LabVIEW对数据采集卡DLL函数的调用
2004年9月襄樊学院学报 Sept.,2004 第25卷第5期 Journal of Xiangfan University V ol.25 No.5LabVIEW对数据采集卡DLL函数的调用刘传清 (襄樊学院 物理学系,湖北 襄樊 441053) 摘要:首先介绍虚拟仪器及其开发环境LabVIEW6的特点,分析并实现了将LabVIEW与外部代码进行连接的高级技术之一—动态链接库(DLL)机制. 实践表明,此机制高效、易行,是增强LabVIEW与其它Windows应用程序之间的数据共享能力的一条很好的途径. 关键词:虚拟仪器;LabVIEW;动态链接库;DLL 中图分类号:TN311.11 文献标志码:A 文章编号:1009-2854(2004)05-0015-03 0 引言 美国国家仪器NI公司的基于G语言的开发环境LabVIEW的出现,使得虚拟仪器的思想为工业界所接受. 所谓虚拟仪器,就是在通用计算机平台上,用户根据自己的需求定义和设计仪器的测试功能,其实质是将传统仪器硬件和最新计算机软件技术充分结合起来,以模块化软件实现并扩展传统仪器的功能. 与传统仪器相比,虚拟仪器在智能化程度、处理能力、性能价格比、可操作性等方面均具有明显的技术优势.LabVIEW(Laboratory Virtual Instrument Engineering Workbench─实验室虚拟仪器工程平台)是目前国际上首推应用最广的虚拟仪器开发环境之一,主要应用于仪器控制、数据采集、数据分析、数据显示等领域,并适用于Windows 9X/XP/2000/ NT、Macintosh、UNIX等多种不同的操作系统平台. 与传统程序语言不同,LabVIEW采用强大的图形化语言(G语言)编程,面向测试工程师而非专业程序员,编程非常方便,人机交互界面直观友好,具有强大的数据可视化分析和仪器控制能力等特点.使用LabVIEW开发环境,用户可以创建32位的编译程序,从而为常规的数据采集、测试、测量等任务提供了更快的运行速度. LabVIEW是真正的编译器,用户可以创建独立的可执行文件,能够脱离开发环境而单独运行. 对于大多编程任务,LabVIEW通常能产生高效的代码.1 LabVIEW调用外部程序代码的途径之一 —— 动态链接库机制 1.1 动态链接库机制概述 LabVIEW是一个功能强大的虚拟仪器开发环境,它完整地集成了与GPIB、VXI、RS-232、RS-485和内插式数据采集卡等硬件的通讯. LabVIEW还具有内置程序库,提供了大量的连接机制,通过DLLs、共享库、ActiveX等途径实现与外部程序代码或软件系统的连接.LabVIEW提供了4种调用外部程序代码的途径,其中动态链接库(Dynamic Link Library─DLL)机制是从LabVIEW调用标准共享库和用户自定义库函数的通用方法. 具体实现时,是使用LabVIEW功能模板中“Advanced”子模板里的“调用库函数(Call Library Function)”结点.“调用库函数结点”包括大量的数据类型和调用规范,使用它可调用大多数标准共享库和用户自定义库中的函数,包括:Windows9X/XP/2000/NT下的动态链接库(Dynamic LinkLibrary)、Macintosh下的代码段(Code Fragment)、UNIX下的共享库函数(Shared Library Function)等.当用户需要调用的代码已经存在,或者用户比较熟悉Windows中动态链接库、Macintosh中代码段、UNIX中共享库的创建过程时,“调用库函数结点”非常有用,此时使用它也最为合适恰当,因为库使用了收稿日期:2004-04-21基金项目:湖北省教育厅重点项目(2003A006)作者简介:刘传清(1964- )男,湖北鄂州人,襄樊学院物理学系副教授.15刘传清:LabVIEW对数据采集卡DLL函数的调用对几个开发环境都适用的格式标准,故用户可以使用几乎任何开发环境去创建LabVIEW能够调用的库. 1.2动态链接库机制实现步骤在Windows 9X下,利用LabVIEW 6.1 (for Windows 95/98/NT)中的“动态链接库机制”调用一个DLL,此DLL返回机器的名称.1)建立“调用库函数结点”新建LabVIEW程序“hostname.vi”,存至新建目录“d:\temp”下,其前面板如下: 图1 库函数调用前面板图 框图程序如下: 图2 库函数调用程序框图 其中,“Call Library Function”结点是通过选择功能模板中“Advanced”子模板里的“Call Library Function”功能模块而产生的.此LabVIEW程序通过“调用库函数结点”调用一个DLL,此DLL将返回机器的名称,返回结果存至字符串指示量“Machine Name”中,而后将字符串常量“LabVIEW is running on ”与“Machine Name”相拼接,拼接之结果在字符串指示量“Message”中显示.2)配置“调用库函数结点”双击框图程序窗口的“Call Library Function”结点,在弹出的对话框中对此“调用库函数结点”进行配置. 其中:在“Library Name or Path”一项中键入“d:\temp\hostname.dll”(即,指明此结点所链接的DLL文件名,它由C源代码“hostname.c”编译而来);在“Function Name”一项中键入“MachineName”(即,指明与此结点相链接的DLL文件中的函数的名称);参数“return type”的类型选择“Void”;所增加的另一个参数“arg1”的类型选择“String”、字符串格式选择“String Handle”;3)编辑C源文件编辑C源文件“hostname.c”(存至目录“d:\temp”下),其内容如下:/* include extcode.h which contains the prototypes for the LabVIEW functions */#include <extcode.h>#include <stdio.h>#include <windows.h>BOOL WINAPI DllMain (HANDLE hDLL, DWORD dwReason, LPVOID lpReserved) {return TRUE;}/* This functions gets the computer name and returns it to LabVIEW */__declspec (dllexport) void MachineName(void *LVHandle) {char computerName[MAX_COMPUTERNAME_LENGTH+1];int compNameLength = MAX_COMPUTERNAME_LENGTH+1;16第25卷第5期襄樊学院学报 2004年第5期/* Get computer name */GetComputerName(computerName, &compNameLength);/* Size LabVIEW handle to the correct size */DSSetHandleSize(LVHandle, compNameLength + 5);/* Copy the string size to the LabVIEW handle */**(int32 **)LVHandle = compNameLength ;/* Copy the string to the LabVIEW handle */sprintf((*(char **)LVHandle)+4,"%s",computerName);}此程序首先了调用Windows的API函数“GetComputerName”获取机器名;然后调用LabVIEW的函数“DSSetHandleSize”来设置LabVIEW句柄之大小;最后将机器名长度(32位整型)、机器名(字符串型)依次写入句柄中.4)编译C源代码将C源代码“d:\temp\ hostname.c”编译成一个DLL文件“d:\temp\hostname.dll”.可使用VC++ 6.0 (for Windows 95/98/2000/NT),完成此编译工作.5)运行VI运行LabVIEW程序“hostname.vi”,结果如下:图3 前面板运行结果 2 结束语 本文着重阐述并实现了将LabVIEW与外部代码进行连接的高级技术之一─动态链接库机制,并给出了应用实例. 由于在LabVIEW中引入了C语言的强大功能,从而提高了LabVIEW的整体性能.本方法已在LabVIEW 6.1 for Windows 95/98/NT及Visual C++ 6.0 for Windows 9X/XP/2000/NT 环境下实现. 实践证明,此方法高效、易行,是增强LabVIEW与其它Windows应用程序之间的数据共享能力的一条很好的途径.参考文献: [1] LabVIEW User Manual,National Instruments Corporation,1998.[2] G Programming Reference Manual,National Instruments Corporation,1998.LabVIEW Data Acquisition Invoke for DLL FunctionsLIU Chuan-qing(Department of Physics, Xiangfan University, Xiangfan 441053, China)Abstract :This paper introduces virtual instrument and the features of its development environment─LabVIEW,analyzes and realizes the advanced technology-Dynamic Link Library(DLL) ,which is one of the general methods for calling external code from LabVIEW. It has been proved that this method is efficient,practicable and also a good one to enhance LabVIEW’s capacity of sharing data with other applications in Windows.Key words:Virtual instrument; LabVIEW; Dynamic Link Library ; DLL17。
LabVIEW中访问数据库的几种不同方法
LabVIEW中访问数据库的几种不同方法虚拟仪器VI(Virtual Instruments)是National Instruments公司在其产品LabVIEW中首先提出的创新概念[1]。
虚拟仪器系统的概念是测控系统的抽象。
不管是传统的还是虚拟的仪器,它们的功能都是相同的:采集数据并进行分析处理,然后显示处理的结果。
它们之间的不同主要体现在灵活性方面。
虚拟仪器由用户自己定义功能,可以自由地组合计算机平台、硬件、软件以及完成应用系统所需要的各种功能。
另外,虚拟仪器开发周期短、成本低、维护方便,易于应用新理论和新技术实现仪器的换代升级[2]。
现代的测试测量系统大多数需要对被测对象进行全方位检测,这必然会使获取的数据量急剧增长。
面对大量的数据信息,采用数据库技术,可准确反映各类数据之间的密切联系,能够有效地管理和组织数据,是现代测试测量系统的发展趋势。
但是现有的LabVIEW版本本身并不具备数据库访问功能,不能像VB、VC++、Delphi、PowerBuilder那样非常方便的进行数据库程序的开发。
因此以LabVIEW编制的虚拟仪器系统需要其它辅助的方法来进行数据库访问。
1、在LabVIEW中访问数据库的方式(1)利用NI公司的附加工具包中的数据库接口工具包LabVIEW SQL Toolkit进行数据库访问。
该工具包集成了一系列的高级功能模块,这些模块封装了大多数的数据库操作和一些高级的数据库访问功能。
它的优点是易于理解,操作简单,用户可以不学习SQL语法。
缺点是需要另外购买且价格昂贵,无疑会增加系统成本。
(2)利用LabVIEW的ActiveX功能,调用Microsoft ADO对象,利用SQL语言实现数据库的访问。
使用这种方法需要用户对Microsoft ADO 以及SQL语言有较深的了解。
(3)通过第三方开发的免费工具包LabSQL访问。
LabSQL利用Microsoft ADO以及SQL语言来完成数据库访问,将复杂的底层ADO 及SQL操作封装成一系列的LabSQL VIs,简单易用。
LabVIEW平台下调用DLL实现PC_104数据采集
YUAN Wei-hua HAN Yu-s heng ZHANG Wei-wei LI Xiao-ming
摘要: LabVIEW 是 一 个 高 效 的 图 形 化 软 件 开 发 环 境 , 在 数 据 采 集 和 测 试 测 量 中 应 用 广 泛 。 但 在 PC- 104 硬 件 平 台 下 使 用
嵌入式计算机应用
中 文 核 心 期 刊 《 微 计 算 机 信 息 》( 嵌 入 式 与 S OC )2008 年 第 24 卷 第 4-2 期
(2)ADT700.h— ——ADT700 驱动程序头文件。
(3)ADT700.cpp— ——ADT700 数 据采 集 卡 的驱 动 程 序代 码 主
文件 , 该 文 件 中 定 义 了 操 作 ADT700 完 成 数 据 采 集 和 输 出 的 主
Call Library Function 节点, 将选择好的 Call Library Function 节
据 采 集与 控 制 系统 。该 卡 可实 现 16 路 单端 或 8 路 差分 模 拟 信
(1)WinIO.dll— ——在 Windows32 操 作 系 统 环 境 下 操 作 硬 件
号输 入 , 具有 12 位 数 字分 辨 率 , 最大 A/D 采 样 率为 100KHz, 量 端 口地 址 所 需要 的 链 接库 文 件 , 由于 Windows32 操 作 系统 采 用
在 Windows 32 操 作 系 统 环 境 下, 可 以 使 用 VC++6.0 建 立
2 PC/104 数据采集 卡 ADT700 简介
DLL 文 件 , VC++ 中 可 以 建 立 两 种 DLL: 使 用 MFC(Microsoft Function Class)的 DLL 和不使用 MFC 的 DLL。每种 DLL 都有它
图解LABVIEW调用DLL
前言:LABVIEW是一个强大的图形编程语言,使用很简单,就是你没有任何编程经验也可以LABVIEW编程,对于需要快速上手图形编程的人是一个不错的选择。
在很多时候我们会用C语言写一些计算机的底层驱动,比如USB数据传输或者串口数据传输,如何把我们自己写的驱动程序集成到LABVIEW中呢?下面我就用图和简单说明的方式给大家说说,由于我也是初学,所以有的地方可能会有错误或不准确的地方,欢迎大家指正,废话不多说了,下面开始正式的教程。
目的:通过一个现成的I2C适配器控制I2C接口的AM2311温湿度传感器,将测得的温度和湿度用LABVIEW显示出来,最终效果如图所示。
准备:1、安装LABVIEW2010。
2、I2C适配器1台。
3、I2C适配器上位机驱动函数库,和函数库头文件。
4、AM2311传感器模块一台。
第一步:打开LABVIEW2010,按下图导入我们需要使用的DLL文件。
得到如下界面,点击下一步。
打开DLL和头文件,点击下一步。
到这里我们的库就基本上导入完毕,但是还有一件事情要做,因为在Ginkgo_Driver.dll里面用到了vt214x.dll里面的一些函数,所以要把这个文件拷贝到刚刚生成库的目录下,否则在运行程序的时候会出现找不到这个DLL的错误提示,而且程序也不能正常工作。
我生成的库目录是:D:\Program Files (x86)\National Instruments\LabVIEW 2010\user.lib\Ginkgo_Driver。
你可以根据自己的实际情况处理,拷贝这个文件后在这个目录下的文件如下图所示:到这里库基本上就导入完毕,下面我们就可以在VI程序里面使用这些库函数了。
第二步:打开LABVIEW软件,新建一个VI文件,另存名字为AM2311.vi。
我们在前面板设计为如下界面。
切换到程序款图界面,因为我们程序需要顺序执行,最后需要在一个循环里面循环读取数据,所以我们可以通过平铺顺序结构来设计程序,在平铺顺序结构的第一帧调用刚刚导入的VTIF_I2C_SelectDevice()函数选择设备,在第二帧调用VTIF_I2C_Init()初始化函数初始化I2C适配器,然后就可以循环的读取数据了,最好将数据解析出来并显示出来。
再谈USB开发:LabVIEW调用DLL文件实现STM32+USB+HID双向通信
4、结尾
到了这里,我们可以看到,LabVIEW 调用 DLL 文件是很简单的,关键是我们要知道 DLL 文件中的函数原型! 我们也可以比较一下通过 VISA 和通过 LabVIEW 调用 DLL 文件实现 USB HID 双向通 信的的优缺点。 1、通过 VISA,我们可以简单和快速地开发 STM32 USB HID 通信,不必了解底层函 数的原型,系统稳定可靠。但需要我们安装庞大的 VISA 驱动程序,而且硬件需要被 MAX 识别。 2、通过 LabVIEW 调用 DLL 文件,我们不需要安装任何驱动程序,发挥 USB HID 免 驱动的优点,但需要我们了解 DLL 文件中的函数原型,而且如果 DLL 文件做得不好的话, 有可能引起程序崩溃。 其 实 我 们 也 可 以 调 用 windows 系 统 自 带 的 hid.dll 文 件 的 , 一 般 在 以 下 路 径 : C:\WINDOWS\system32。现在的 USB HID 上位机软件,一般都是调用微软的 hid.dll 来实现 的。这个留给用户去完成了(不难的,只要知道函数原型就可以了) 。 其实 LabVIEW 作为一种通用的编程语言, 和 VC++一样, 也可以封装和创建 DLL 文件 的,有兴趣的用户可以了解一下,这里就不详细介绍了。
ห้องสมุดไป่ตู้
2、LabVIEW调用我们创建的DLL文件
LabVIEW 的“调用库函数节点”在以下路径: “互连接口”“库与可执行程序” “调用库函数节点”
我们把这个控件放在 VI 的程序框图中:
双击控件后,可以打开如下配置窗口:
“库名/路径”比较简单,就是 DLL 文件的路径了。而“线程” ,一般都是选择“在 UI 线程中运行” 。在“调用规范”中,因为是调用我们写的 DLL 文件,所以选择“C” 。如果 是调用 windows 系统中的 DLL 文件,那么选择“stdcall(WINAPI) ” 。 我们把 DLL 文件装进来之后, 就可以看到 DLL 文件中包含的所有函数了, 在 “函数名” 下拉列表中可以看到。
LABVIEW调用动态链接库
Array 型参数的数据类型同 Numeric 型参数的数据类型;
通过 Dimensions 指定数组的维数;
Array Format 有以下几种选项:
Array
z Array Data Pointer 传递一维指针到数组值
z Array handle 传递一个指向数组每一维的 4 个字节指针的指针,其后为数组
long add_num(float *p, long size, float *sum);
图 6-14 CFN 的配置结果
i) 确定后会发现 CFN 根据配置自动进行了更新更新后的情况如右图示。 2. 生成.C 或.C++文件,完成实现函数功能的代码并为函数添加 DLL 导出声明;
在 CFN 节点上通过右键菜单选择“Create .C File…”生成 mydll.c 文件,其内容如下:
12
该文档版权归上海微视泰科工作室所有,转载请注明出处!
网址:
Email: hightechyoung@ 作者:HighTech Young
通过 Parameter 域和其右边的“Add a Parameter Before”,“Add a Parameter After” 和“Delete this Parameter”三个按钮可以增加、删除以及修改 CFN 的输入参数和类型。当用户选择某参数的类型后,其详 细的数据类型列表和参数传递方式列表将显示出来,以方便进行详细设定。表 6-1 列出了可以设定的输入参 数类型及其详细数据类型信息。
6.3.2. 调用自己开发 DLL 中的函数 开发人员可以在 LabVIEW 中指定 DLL 函数的原型,然后在外部 IDE 中完成代码并编译生成.dll 文件以
供项目使用。 下面就以一个简单DLL 函数原型。 a) 在 LabVIEW 的 diagram 面板上添加一个 CFN 并通过其右键菜单打开 CFN 的配置对话框; b) 使“Library Name or Path”输入框为空; c) 指定函数名“Function Name”和调用方式“Calling Conventions”分别为 add_num 和 C; d) 重命名返回参数的名称为“error”,并指定其类型为 Numeric 的 Signed 32-bit Integer; e) 用“Add a Parameter After”按钮添加第一个参数 p,指定其类型为 Array 的 4-byte Single 并 设定 Array Format 为 Array Data Pointer; f) 用“Add a Parameter After”按钮添加第二个参数 size,指定其类型为为 Numeric 的 Signed 32-bit Integer 并设置参数传递方式为 Value; g) 用“Add a Parameter After”按钮添加第三个参数 sum,指定其类型为为 Numeric 的 4-byte Single 并设置参数传递方式为 Pointer to Value; h) 至此,函数的原型应如下所示(图 6-14):
labview调用dll方法+
* Variable Name : CRC_TABLE_L
* Description : CRC Table.
*******************************************************************************/
const unsigned char CRC_TABLE_L[256]=
*******************************************************************************/
const unsigned char CRC_TABLE_H[256]=
{
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
// VCdll.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "UniversalDefine.h"
extern "C" __declspec(dllexport) unsigned int CRC16(void *pbuf, unsigned char len) ;
0x78,0xB8,0xB9,0x79,0xBB,0x7B,0x7A,0xBA,0xBE,0x7E,0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,
0xB4,0x74,0x75,0xB5,0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,0x70,0xB0,
Labview调用dll详解(C语言DLL
Labview调用dll详解(C语言DLLLabview调用dll详解(C语言DLL)之一labview中提供了两个C接口,一个是CLF,一个是CIN。
本帖子讨论DLL的调用,也就是CLF。
由于C的强大功能,本帖子讨论C创建的DLL的调用。
首先简单解释一下DLL,也就是动态链接库。
DLL 的好处是屏蔽底层的细节,用户不用也不能打开DLL,便于资源代码数据共享,节省内存等。
一般情况下labview是不需要调用DLL的。
DLL分两类,一类是API,一类是自己创建的DLL。
这两者本质都一样,但是调用一般来说是有区别的。
R) {$ f0 x7 @3 B 要调用DLL必须要有DLL,也就是所谓的路径。
这个一般不会出错的,不用解释了。
其次是选择函数,这个也不难。
线程一般选择UI线程,任意线程的DLL和UI线程DLL有颜色上的区别,其次在源代码中也有区别(这个不是DLL调用失败的主因,不用过多纠缠)。
接下来是调用设置:Ccall和standcall。
一般来说,windows API采用的是standcall,自己创建的采用Ccall。
两种调用区别在于参数进入栈的顺序不同。
这里随便说一下,栈由系统自动分配内存,类似C语言的int a都是分配的栈内存;new分配的是堆内存。
栈内存由系统负责回收,堆内存一般程序员负责释放,所以要注意系统的内存泄漏。
labview的初始化数组也会分配内存,所以不宜频繁调用。
8 h. p8 V/ m, J- D4 X 接下来是最重要的参数配置,也是最复杂的参数配置。
首先要知道函数原型,C语言里面叫导出函数类。
一般在include文件下面的头文件里面。
下面是一个典型的函数原型:extern "C" ZLDS10X_DLL_API SENSOR_HANDLE ZLDS10X_DLL_stdcall ZLDS10X_Open(char * portnum , int baud , int timeout , int address); 值得注意的是,很多人会把函数原型看错。
怎样在LabVIEW中调用Win32动态连接库_DLLs_
收稿日期:1999212218 作者简介: 陶以政 (1971-),男,四川广安人,工程师,主要研究方向:CAD/CAM 应用研究; 潘振显 (1941-),男,江苏苏州人,研究员,主要研究方向:自动控制、CAD/CAM 应用研究.文章编号:1001-9081(2000)06-0072-02怎样在LabVIEW 中调用W in32动态连接库(D LLs )陶以政,潘振显(中国工程物理研究院,四川绵阳621900)摘 要:LabVIEW 是美国国家仪器(National Instruments )公司开发的基于图形化的程序设计语言(G 语言)。
以Windws 95/98/NT 中USER32.D LL 库中的信息框函数MessageBoxA 为例,说明在LabVIEW 中怎样调用Win32动态连接库的方法。
关键词:虚拟仪器;LabVIEW ;动态连接库(D LLs )中图分类号:TP311.13 文献标识码:A LabVIEW 主要用于开发数据检测、数据测量采集系统、工业自动控制系统和数据分析系统等领域,它是虚拟仪器系统的主要开发工具。
LabVIEW 利用NI 公司相关的硬件产品驱动程序,根据用户的需求开发虚拟仪器系统。
我们利用LabVIEW 开发自动控制系统时,通过自己开发的动态连接库,在LabVIEW 应用中获得了成功。
1 LabVIEW 中调用Win32动态连接库 图1 图2在LabVIEW 中利用Call Library Function 节点(node )可以较容易地实现访问动态连接库。
下面是在LabVIEW for Windws 95/98/NT 中调用动态连接库的主要特点:・调用D LLs 可以用C 或stdcall 调用习惯;・能用整数或浮点数的任意维数组;・不需要关心用巨大模式(H UGE )、近(NE AR )或远(FAR )指针;・LabVIEW 字符串能通过C 或Pascal 字符指针;・可以用空(V oid )、整数(integer )和浮点数(Float )指针为返回值。
Labview DLL调用指南-非常有用
【转】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的输入输出端口,如果添加不完整,则需要再手动添加额外的输入端或者输出端。
LabVIEW调用库函数节点
LabVIEW调⽤库函数节点⼀、dll⽂件的创建dll⽂件的创建,我使⽤的是VS 2017,以此为例介绍:1、新建⼀个dll项⽬,选择Visual c++》Windows 桌⾯》动态链接库(DLL)然后会得到如下图所⽰的Dll.cpp⽂件会得到⼀个空的头⽂件⽂件其中#pragma once 代表这个头⽂件只被编译⼀次,与1 #ifndef _DELL1_H2#define _DELL1_H3456#endif作⽤类似。
2、编写程序在头⽂件写声明,值得注意的是,这⾥需要使⽤__declspec(dllexport)关键字修饰,表⽰这个函数是输出的函数可以在外部使⽤,这⾥的 extern “C” 表⽰的是⽤c的编译器来编译这个函数,这⾥的C是⼤写的要注意,这样编译出来的函数名就是我们希望的,否则就会产⽣不⼀样函数名。
extern"C" __declspec(dllexport) UINT8 choose(double *a, UINT8 *b);去源⽂件Dll1.cpp定义函数体,别忘记在开头把Dll1.h头⽂件包括进来。
1 #include "stdafx.h"2 #include "Dll1.h"34double abs(double a)5 {6return a > 0 ? a : -a;7 }8910extern"C" __declspec(dllexport) UINT8 choose( double *a,UINT8 *b)11 {12double T = *a;13double To = *(a + 1);14double Tb = *(a + 2);15double Tt = *(a + 2);16if (Tb < T | Tt < T)17 {18if (abs(Tb - Tt) < 3)19 {20 *b = 1;21 *(b + 1) = 1;22 }23else24 {25 *b = 0;26 *(b + 1) = 0;2728 }29 }30else31 {32 *b = 0;33 *(b + 1) = 0;3435 }3637return1;38 }⽣成dll,在“⽣成”》⽣成解决⽅案,如果没报错的话就能⽣成dll⽂件,实际⽣成的时候,如果之前这个dll⽂件已经zailabview 使⽤了,那么⽣成的时候可能会报错(即使是复制出去的dll)关闭labview重新尝试。
如何在LabVIEW中使用动态链接库
Rich Chen 2010.08.12
为了给同学帮忙,才接触的 LabVIEW。用 LabVIEW 的图形语言来处理数据不是一件 容易的事,主要是不够灵活,有时不得不借助 C 这样的语言来处理。在网上也搜集了不少 资料,先后尝试了 MATLAB 脚本控件、CIN 控件方法,但都没有成功。无奈之下又尝试了 一下 DLL 控件,不管怎样是成功了。分享一下,希望对大家有所帮助。
VI 工程由 LabVIEW2009 中文版开发,DLL 工程由 VC++6.0 开发。 1)创建一个 VI 工程,在程序框图中右击空白处,点击展开按钮展开快捷菜单的,选 择互联接口,将鼠标移动到库与可执行程序上会弹出其菜单项,单击调用库函数节点,就可 将其放到程序框图中。
2)右击调用库函数节点控件,选择菜单项—配置,或者双击控件,都会出现调用库函 数对话框。可以通过这个对话框设置调用库函数节点的输入输出参数,以便生成被调用函数 的原型。下面以求一维数组的最大值及其索引号为例进行介绍。
int32_t i; *max=0; if(array!=NULL) {
for(i=0;i<size;i++) {
if(*max<array[i]) {
*max=array[i]; *index=i; } } } else return 0;//空数组 return 1;//数组有效 } 8)创建头文件。选择菜单 files 的 new,创建一个 C/C++Hearder File 文件,命名为 dll。
单击 OK。选择工作区的标签 FileView,打开 Source Files 文件夹,双击上一步创建的源 文件 dll.cpp。下面就可以下函数的实现代码了
如何从LabVIEW中调用动态链接库DLL
问题:如何从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中的函数手动调用该函数。
基于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 接口实现上位机与下位机通信。
【LabVIEW】构造器节点调用C#动态链接库dll
【LabVIEW】构造器节点调⽤C#动态链接库dll
⼀、调⽤C#动态链接库dll
(1)新建VI,后⾯板选择“互连接⼝->.NET->构造器节点”。
(2)双击“构造器节点”图标,找到我们刚刚编译好的dll⽂件,选中相应类名,确定。
(3)选择“互连接⼝->.NET->调⽤节点”。
(4)将⼆者相连,点击调⽤节点选择相应⽅法。
⼆、实现遍历DataTable
互连接⼝-->.net-->构造器节点
在C#中写⼀个函数来实现这个功能,然后再将⼯程⽣成⼀个动态链接库,然后在LabVIEW中就可以调⽤⽣成的dll中所写的这个函数来实现对datatable的读取。
三、常见问题
1、调⽤.net构造器占⽤内存
运⾏不久后提⽰构造器节点内存已满。
问题是在构造了多个引⽤后没有合理的关闭引⽤导致了使⽤引⽤的增加也就导致了内存的增加。
解决⽅法:在使⽤调⽤节点和属性节点时要做到每⼀个节点后都有⼀个对应的关闭引⽤,这样就可以避免由于没有关闭引⽤⽽使内存增加的问题。
注意:如果有for循环,要在循环外关闭引⽤,否则也会产⽣错误的。
2、.NET构造器节点该类不包括任何公共构造器
1、确认已经在类和⽅法上加了Public关键字;
2、把构造函数删掉。
3、报错“Object reference not set to an instance of an object”
某函数调⽤产⽣这个问题。
该部函数传⼊参数有ref,数据类型是数组,删掉这个传⼊参数就不报错了,但其他函数同样传⼊参数⼜不报错...个例先记录下来,原因待查。
LabVIEW中的动态连接库调用
LabVIEW中的动态连接库调用
赵炯;刘力平
【期刊名称】《中国工程机械学报》
【年(卷),期】2007(005)001
【摘要】介绍了LabVIEW调用Win32动态连接库的方法,并通过实例,分析了LabVIEW与外部代码进行连接的机制,增强了LabVIEW的系统开发能力.
【总页数】5页(P122-126)
【作者】赵炯;刘力平
【作者单位】同济大学,机械工程学院,上海,200092;同济大学,机械工程学院,上海,200092
【正文语种】中文
【中图分类】TP3
【相关文献】
1.在LabVIEW中调用VB的混合编程的实现 [J], 唐鑫;陈珂
2.怎样在LabVIEW中调用Win32动态连接库(DLLs) [J], 陶以政;潘振显
bVIEW中调用MATLAB进行信号处理方法研究 [J], 吴小红
bVIEW和TestStand中调用Python编程 [J], 刘规划
bVIEW中带参数输入的动态连接库的调用 [J], 顾斌;陈忧先
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何从LabVIEW调用动态链接库DLL
主要软件:
主要软件版本:1.0
主要软件修正版本:N/A
次要软件:N/A
问题:如何从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的整个库). 你可以在T ools»Import»Shared Library (.dll)...中找到该工具; 按照向导进行下去.
4如何函数不含有复杂数据类型但是没有头文件(*.h), 首先确定你使用的是C/C++ DLL因为大部分的编程环境将对这种DLL生成头文件. 如果你确实在处理C/C++ DLL, 找到该函数的相关文档,因为你需要确定那些在DLL中被调用的函数的参数. 一旦参数被确定,使用Call Library Function Node LabVIEW中的函数手动调用该函数。
5如果你需要调用的函数含有复杂的数据类型,你需要手动使用LabVIEW中的Call Library Function Node功能直接调用, 在配置对话框中添加原型. 注意如果你的复杂数据类型是结构体而不是原始数据类型(int, double, char), 从基于C的编程语言中创建wrapper DLL. 因为C/C++ 结构并不总是与LabVIEW的数据类型相对应的, wrapper DLL 能够近似的解析复杂结构的内容并且把它们翻译成原始类型. 比如,如果在C中的一个结构体包含char * (字符串或者字符数组), 可以创建一个wrapper function,LabVIEW将直接用char * type 调用它, 把它放在结构体中然后按照顺序调用DLL. 注意如果你有DLL源代码,可以直接修改DLL使得它能够接收一个char * 而不是该结构体.
如果DLL是.NET assembly:
6为了在LabVIEW中使用.NET assembly , 简单地使用.NET 面板(Connectivity».NET) 找出所有可用的函数.
7首先使用结构节点来例示.NET assembly中的一个类.
8通过简单地连接结构节点的类引用到属性节点或者调用节点,使用属性节点和调用节点来获取该类的属性和方法。