LABVIEW的DLL与API调用

合集下载

LabVIEW编程调用DLL时遇见的问题

LabVIEW编程调用DLL时遇见的问题

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文件的全路径加在“包括路径”中。

关于LabVIEW产生的DLL被C调用的问题

关于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调用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适配器,然后就可以循环的读取数据了,最好将数据解析出来并显示出来。

LabVIEW与外部程序间DLL文件的调用

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文件, 使程序不至于太过巨大。

第13章 LabVIEW常用外部接口

第13章 LabVIEW常用外部接口

ActiveX组件包括如下几类。 (1)自动化服务器 (2)自动化控制器 (3)控件 (4)文档 (5)容器
13.4.2 ActiveX控件
ActiveX控件是ActiveX最常用的,它 是存放于ActiveX容器的一个可嵌入的组件。 LabVIEW中ActiveX容器函数位于“控件” 选板下“新式→容器”子选板中,如图1314所示。利用“ActiveX容器”函数,用户 可以调用第三方提供的各种ActiveX控件。
图13-7
CIN节点函数接线端子 图13-8 CIN节点函数接线端子与控件的连接
图13-9
创建DLL工程对话框
图13-10 将cintools路径
DLL工程编译命令
图13-13 CIN节点示例程序框图和运行界面
13.4 ActiveX
13.1 调用库函数
13.1.1 DLL简介
DLL是Dynamic Link Library 的缩写 形式,中文译为动态链接库。它是作为共 享函数库的可执行文件。 可以把动态链接库理解为一个函数库。
DLL在编程中的广泛应用主要缘于它的 一些优点。 (1)使用较少的资源 (2)推广模块式体系结构 (3)简化部署和安装 Windows操作系统中一些作为DLL实 现的文件有:ActiveX 控件(.ocx)文件、 控制面板(.cpl)文件和设备驱动程序 (.drv)文件。
图13-1
“调用库函数节点”函数位置
图13-2
“调用库函数”函数配置属性对话框
13.1.4 调用库函数示例
图13-3
调用库函数示例程序框图
13.2 Matlab接口
13.2.1 Matlab Script节点
Matlab是由数值分析、矩阵分析、信 号处理和图形绘制等组成的一个高性能的 数值计算和图形显示的计算软件环境。为 了结合两者以充分利用LabVIEW和Matlab 各自的优点,LabVIEW通过提供的Matlab Script节点可以导入和编辑Matlab程序。

LABVIEW的DLL与API调用

LABVIEW的DLL与API调用

LABVIEW的DLL与API调用LABVIEW的DLL与API调用一.实验目的1.熟悉LabVIEW调用动态链接库的过程2.学会编写用LabVIEW调用WINDOWS的API函数二.实验器材1.计算机(带有声卡)2.LABVIEW8.20软件三.实验原理在开发自动测量系统时,经常遇到计算机与仪器的通信问题,涉及仪器控制及数据处理问题,LabVIEW语言在这一领域的应用有着独到的优势。

为了在LabVIEW中能够充分利用其他编程语言的优势,LabVIEW提供了外部程序接口能力,包括动态链接库(DLL)、C语言接口(CIN)、ActiveX和Matlab等。

动态链接库是基于Windows程序设计的一个非常重要的组成部分。

LabVIEW 开发中使用DLL,可以使代码更简洁,内存资源的使用更经济,而且可以便捷地利用仪器厂商或第三方提供的仪器控制子程序加速开发进程。

而windows平台包含有大量的API函数,这些API函数提供了大量在Windows环境下可操作的功能,它们位于Windows系统目录下的多个DLL文件中,因此在LabView中调用API 函数和DLL的方法是一致的。

在LabVIEW中,利用库函数节点可以较容易地实现对DLL的调用,从而提高了程序的开发效率。

使用调用库函数节点,可以调用Windows标准的动态连接库,也可以调用用户自己编制的DLL。

LabView中动态链接库的调用可在程序框图的函数选板中选取“调用库函数节点”来完成,该节点位于:互连接口->库和可执行程序->调用库函数节点。

将选择好的调用库函数节点图标放在程序框图中,然后通过对它的节点图标进行配置,可以指定DLL模块中与LabVIEW数据交换的相应的驱动函数。

在调用DLL时,首先要找到找到头文件(*.h)或者函数原型声明,确定你需要调用的函数,注意函数的参数是否包含了原始数据类型参数比如int,char, double,等等或者是否包含了复杂数据类型比如clusters。

LabVIEW常用外部接口

LabVIEW常用外部接口
程。
图13-7 CIN节点函数接线端子 图13-8 CIN节点函数接线端子与控件的连接
图13-9 创建DLL工程对话框
图13-10 将cintools路径添加到DLL工程中
图13-11 代码生成的设置
图13-12 DLL工程编译命令
图13-13 CIN节点示例程序框图和运行界面
13.4 ActiveX
图13-14 “ActiveX容器”函数位置
图13-15 选择ActiveX对象对话框
图13-17 调用Windows Media Player控件程序框图 图13-16 ActiveX日历控件对象
图13-18 调用Windows Media Player控件前面板
13.4.3 ActiveX自动化
ActiveX自动化是ActiveX的一个重要 组成部分,通过ActiveX自动化,可以实现 一个程序对另外一个程序的调用。
LabVIEW作为ActiveX自动化客户端 时,同样可以访问ActiveX对象。ActiveX 相关的操作函数位于“函数”选板下“互 连接口→ActiveX”子选板中,如图13-19所 示。
13.1.3 库函数的调用
“调用库函数节点”函数支持众多数据 类型和调用规范。
图13-1 “调用库函数节点”函数位置
图13-2 “调用库函数”函数配置属性对话框
13.1.4 调用库函数示例
图13-3 调用库函数示例程序框图
13.2 Matlab接口
13.2.1 Matlab Script节点
在LabVIEW5.1及其以后版本中, LabVIEW既可作为ActiveX的服务器端, 也可以作为一个客户端。
ActiveX组件包括如下几类。 (1)自动化服务器 (2)自动化控制器 (3)控件 (4)文档 (5)容器

labview调用dll方法+

labview调用dll方法+

0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
unsigned char i;
unsigned char RH = 0xff;
unsigned char RL = 0xff;
unsigned char *buf=(unsigned char *)pbuf;
do
{
i = *buf ^ RL;
buf ++;
RL = RH ^ CRC_TABLE_H[i];
RH = CRC_TABLE_L[i];
}while(--len);
return(RH * 256 + RL);
}
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
};
/*******************************************************************************

LabVIEW与外部程序间DLL文件的调用

LabVIEW与外部程序间DLL文件的调用

图20 Parameters页面点击“OK”,将生成的CLN的输入段连接到DAQmx Read.vi,return type 输出连接到波形图表上,即可实现采集值放大10倍的功能。

图21 完成后的程序方法二LabVIEW中还有一种方法可以调用DLL文件,在VI的选项栏,依次选择Tools——Import——Shared Library(.dll),弹出Import Shared Library 对话框。

图22 生成Import Shared Library对话框选择Create VIs for a shared library,点击Next,在Shared Library (.dll) Files中输入Scale.dll文件的路径,Head(.h) File里填写头文件的路径。

图23 选择DLL文件路径和头文件路径点击Next,如果DLL文件中依赖其他的一些DLL文件,需要在Include Paths中填写这些文件的路径。

其他选项可以根据客户需求设置,一般默认即可。

这样一直点击Next到最后,选择Open the generated library,点击Finish。

这样可以生成一个.lvlib格式的库文件,里面包含了Scale.vi,这是将调用该DLL 文件的方法封装好的VI,只留下输入和输出接口,方便运用到LabVIEW的程序中。

直接将Scale.vi拖放到刚才的连续采集中即可完成方法一的功能。

图24 完成的程序VC调用LabVIEW生成的DLL文件刚才介绍了LabVIEW调用DLL文件的方法,使用VC调用LabVIEW生成的DLL 文件也很简单。

还是以之前生成Scale 的DLL文件为例,不同的是采集电压程序使用的是C语言的例程,但和LavVIEW实现的功能相同。

首先将先前生成Scale DLL文件时,路径下所有的文件全部复制粘帖到C语言例程的文件夹下。

打开连续采集程序,点击状态栏的Project——Settings,在Project Settings对话框中加载入Scale.lib的静态链接库。

labviewAPI

labviewAPI
wcmdshow参数可参考API浏览器)
获取窗口句柄并显示窗品状态
8. user32.dll:ExitWindowsEx
执行成功则返回为非0,否则为0 9. user32.dll:SetWindowPos(设置窗口位置)
10. user32.dll:SetWindowRgn(改变窗口外观) 11. gdi32.dll:CreateRoundRectRgn(画图)
查找窗口标题并代替它 3. kernel32.dll:GetDiskFreeSpaceA
获取磁盘空间
4. user32.dll:GetCursorPos 5. user32.dll:WindowFromPoint
获取指针位置及句柄,并设置其内容 6. user32.dll:GetWindow 7. user32.dll:ShowWindow(中hwnd的参数可通过指针句柄来获取,
两种完全不同的含义,前者表示忽略窗口的类,而后者表示窗口的类是个空串。类似的,我们也可 以忽略标题而搜索指定的类。 • 从上面的讨论中可以看出,如果要搜索的外部程序的窗口标题比较容易得到,问题是比较简单的。 可如果窗口的标题不固定或者根本就没有标题,怎么得到窗口的类呢?如果你安装了Visual C++, 你可以使用其中的Spy++(如果没有VC++,在VB的盘上也可以找到Spy),在Spy++中有一个 FindWindow工具,它允许你使用鼠标选择窗口,然后Spy++会显示这个窗口的类。
• 这个函数有两个参数,第一个是要找的窗口的类,第二个是要找的窗口的标题。在搜索的时候不一 定两者都知道,但至少要知道其中的一个。有的窗口的标题是比较容易得到的,如"计算器",所以 搜索时应使用标题进行搜索。但有的软件的标题不是固定的,如"记事本",如果打开的文件不同, 窗口标题也不同,这时使用窗口类搜索就比较方便。如果找到了满足条件的窗口,这个函数返回该 窗口的句柄,否则返回0。

LabVIEW调用库函数节点技术

LabVIEW调用库函数节点技术

LabVIEW调用库函数节点技术LabVIEW提供了调用库函数节点(Call Library Function node,简称CLF),利用CLF,可以在LabVIEW中实现DLL和API函数的调用。

在LabVIEW中使用CLF 需要了解动态链接库里被调用的函数名称、功能及其输入输出参数等,下面将详细介绍在LabVIEW 8.6下利用CLF调用6050运动控制卡基于C语言编写的驱动程序[41]。

首先在框图程序中创建一个空的CLF,CLF位于“函数模板→互连接口→库与可执行程序子模板”,如图1-1所示,下面给出其详细的配置过程:图1-1 CLF节点图标(1)双击CLF图标弹出配置对话框,如图1-2所示,首先要指定6050控制卡动态链接库的库名或路径。

点击其右边的文件夹图标,打开一个文件对话框,找到6050运动控制卡的动态链接库文件“dfjzh6050dll.dll”所在位置。

(2) LabVIEW装载了DLL文件后会自动检测其所包含的函数,但不能检测函数中的参数及其数据类型,因此接下来的要参照DLL说明文件“dfjzh6050dll.h”及控制卡使用手册选择所要配置的函数名,设置函数参数。

(3)在调用规范中有“stdcall(WINAPI)”和“C”两个选项,它们的区别是,若调用函数为Windows标准共享库函数则选择“stdcall(WINAPI)”选项,若调用函数为VC环境下编译的库函数则选择“C”选项,本文选择“C”选项。

(4)在“线程”选项中选择“在UI线程中运行”。

至此,完成了所有配置选项,在CLF配置图最下方可以看到函数原型。

下面阐述配置CLF过程中需注意的两个问题:图1-2 CLF节点配置图Figure1-2 CLF Node Setting Chart(1) LabVIEW线程调用方式节点配置中,有两种线程调用方式,“在UI线程中运行”和“在任意线程中运行”。

“在UI线程中运行”表示在用户接口线程中调用,DLL的执行期将等到用户接口线程(在此即LabVIEW环境下的VI应用程序)执行DLL的导出函数调用时才开始;“在任意线程中运行”表示允许多个线程同时调用这个DLL。

LabVIEW调用操作系统功能

LabVIEW调用操作系统功能
节点位置“函数→互连接口→库与可执行程序”选板
38
7.6 调用动态链接库(DLL)
配置CLF节点 右键单击节点并选择“配置…”选项,或者直接双击节点
39
7.6 调用动态链接库(DLL)
配置DLL的“函数”、“参数”、“回调”和“错误检查”具体步 骤
DLL “函数”页数据类型配置注意
Windows c:\temp\data.dat; Mac OS c:temp:data.dat; Linux /c/temp/data.dat。
13
7.3 读/写配置文件
配置文件写操作
Windows配置文件标准格式 生成名为“Configuration.ini”的配置文件
14
7.3 读/写配置文件
LabVIEW调用操作系统功能
引言
任何一个应用程序开发平台都有其自身的优势与 不足,LabVIEW也不例外。作为一个高级编程人员 ,在开发一个大的复杂应用程序时必须能够综合 应用不同软件开发平台的功能,才能使项目更加 完善。一个好的软件开发环境,也必然具备与其 他应用程序的交互功能及必要的开发工具。
?将与手动配置相似的注册表信息写到注册表中实现odbc数据源的自动配置74读写系统注册表?labview中实现为应用程序自动地配置odbc数据源75输入设备控制?用来获取连接到计算机上的操纵杆键盘和鼠标的信息?输入设备控制vi位于函数互连接口输入设备控制子选板75输入设备控制?实时获取鼠标键盘信息例程?首先通过查询输入设备queryinputdevicesvi查询按键和鼠标的信息?分别初始化键盘和鼠标?在while循环中获取键盘按键信息和鼠标位置及点击信息?关闭输入设备75输入设备控制?程序框图75输入设备控制?程序界面76调用动态链接库dll?动态链接库?动态链接库dynamiclinklibrarydll是一个可以多方共享的程序模块内部对共享的例程和资源进行了封装

Labview调用库函数节点方法解析

Labview调用库函数节点方法解析

Labview调用库函数节点(调用DLL)相对于CIN来讲,NI更推荐用户使用DLL来共享基于文本编程语言开发的代码。

除了共享和重复利用代码,开发人员还能利用DLL封装软件的功能模块,以便这些模块能被不同开发工具利用。

在labview中,使用DLL一般有以下几种途径:(1)使用自己开发DLL中的函数。

(2)调用操作系统或硬件驱动供应商提供的API。

对于前一种方法来说,又可以通过以下几步实现:(a)在labview中定义DLL原型;(b)生成.C或.C++文件,完成实现函数功能的代码并为函数添加DLL导出声明;(c)通过外部IDE(如VC++)创建DLL项目并编译生成.dll文件。

下面的内容将具体讲解:配置Call library function node (CFN)无论在labview中使用自己开发的DLL,或者硬件驱动供应商(操作系统)提供的API,都可以通过配置CFN来完成。

如下图在CFN图标的右键菜单选择“配置”,打开配置对话框,通过该对话框,可以指定动态库存放路径、调用函数名以及传递给函数的参数类型和函数返回值的类型。

在配置完成后,CFN节点会根据用户的配置自动更新其显示。

通过browse按钮或者直接在library name or path输入框中指定调用函数多在.dll文件的路径。

通过browse按钮下的控件用户可以指定多个线程同时调用DLL。

默认情况下,labview以run in UI Thread方式调用DLL,调用的函数将直接在用户线程中运行。

另外一种方式是递归方式reentrant,在这种情况下可以允许多个线程同时调用DLL中的函数。

但要确保正常调用,必须使dll中的代码线程安全。

在“Function Name”输入框中指定要调用函数的函数名。

通过“Call Conventions”下拉列表框指定调用DLL 中函数的方式。

可以指定调用方式为“C”(默认方式)或Windows 标准调用方式“stdcall”。

Labview调用DLL时接口类型匹配简介

Labview调用DLL时接口类型匹配简介

调用DLL时接口类型匹配简介1、数值类型Data type:选择数值的类型。

Pass:选择采用传值方式还是传引用方式。

2、布尔类型a. 方法一:使用数值类型作为输入输出。

在连接输入的时候将布尔值转换为数值。

在输出的时候使用判断是否等于0来获取布尔值。

b. 方法二:类型中选择“Adapt to Type”(匹配至类型),数据格式选择“Handles by Value”。

在程序中,直接接入布尔数据,接线端会自动变为布尔类型。

3、字符串类型由于需要为字符串分配内存空间,对于字符串输出,需要为其在输入的一端接入初始字符串。

当初始字符串长度不够时,程序会因为内存内存越界而出错。

4、一维数值数组a. 当生成dll的时候采用“Array Data Pointer”时,参数中会自动增加一个“len”的数值参数:在“Length Input”中会默认设置为此参数值,用以表示数组的长度。

在调用此dll时,对于数组类型,在“Array format”中设置为Array Data Pointer。

同时需要将数组的长度值接至len端上:b. 当生成dll的时候采用“Array Handle Pointer”时,这时输入输出对应的是指向句柄的指针,可执行系统级的操作。

程序可以自动获取数组的长度,所以将不会有“len”参数出现。

在调用此dll时,在“Array format”中选择Array Handle Pointer即可。

在程序中不再需要为数组指定长度。

5、二维数值数组当参数为二维数值数组的时候,在LabVIEW下生成dll时类型只能选择为指向句柄的指针。

调用的方法与4.b类似,只需将“Dimensions”设置为2即可:6、不包含数组的簇数据类型设置为“Adapt to Type”,数据格式设置为“Handles by Value”。

将簇直接接入即可。

7、包含数组的簇、调用方法与调用一维数组类似。

a. 当参数类型为句柄时(一般情况下这种dll是不能使用LabVIEW生成的),在调用dll 的时候,类型设置与不含数组的簇一样:由于需要为这种簇分配内存空间,所以需要将簇的输出接入对应的数据:b. 当参数类型为指向句柄的指针时,将数据格式设置为“Pointers to Handles”。

labview DLL调用

labview DLL调用

动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库。

在LabVIEW中,一维数组、二维数组、字符串是可以和C/C++中的相应数据类型直接对应起来,因此比较容易实现。

那么对于C/C++语言中的结构体,大家也会想到可以和LabVIEW中的簇对应起来,但是在具体的应用中还会涉及到一些细节,需要我们去留意,否则很可能调用不成功,甚至由于非法读写内存导致系统崩溃。

另外,在LabVIEW中的返回值只有数值、字符串和指针,因此当DLL中的函数返回值为结构体时该如何处理?当输入参数包含指向函数的指针时该如何处理?在解决这些问题之前,先推荐四篇文档,有长有短,但是都写得很细致:1)如何通过调用库函数结点使用DLL——Configuring the Call Library Function Node to call a Simple DLL 链接:https:///content/docs/DOC-90692)如果是简单的数据类型(如数值、数组、字符串、简单结构体),在LabVIEW和DLL之间传递或接收指针,LabVIEW能够自动的正确的解析指针——Passing and ReceivingPointers with C/C++ DLLs from LabVIEW 链接:https:///content/docs/DOC-90803)因为LabVIEW隐藏了对内存的管理,没有开放的函数提供对具体内存地址的直接访问,所以当C/C++中返回的是一个指针,并且LabVIEW又不能自动解析这个指针时,该怎么办——Dereferencing Pointers from C/C++ DLLs in LabVIEW 链接:https:///content/docs/DOC-90914)介绍导入共享库工具(Import Shared Library Wizard),当我们拿到一个DLL和它的头文件(.h)时,利用该工具,能够自动生成针对DLL每个函数的子VI,最大的好处是不需要再手动设置输入输出参数并进行类型匹配,当然它有一定的局限性,比如复杂的类型它匹配不了——Creating Wrapper VIs for C/C++ DLL functions using the Import Shared Library Wizard 链接:https:///content/docs/DOC-90785)大家也可以通过这篇文档直入主题,因为它写得很全,包含详细的VI和C/C++源代码,并且有一个目录供大家索引,它回答了以下情况的问题:1)数值型2)一维数组 3)字符串4)二维数组 5)简单结构体 6)复杂结构体。

Labview调用dll详解(C语言DLL

Labview调用dll详解(C语言DLL

Ccall和standcall的区别?自己创建的采用Ccal?你都试过吗?
4 n! W5 G+ P' I- M' B- U7 P' AC能用new来分配内存?也许我上学时学的不是ansi c
解释前先说一句废话,只有多了解C才能调用好DLL。LV自带的DLL解析(也就是导入共享库)是没用的。下面继续说这个函数。extern "C" ZLDS10X_DLL_API SENSOR_HANDLE ZLDS10X_DLL_stdcall ZLDS10X_Open(char * portnum , int baud , int timeout , int address); 这里面有四个参数一个返回值。SENSOR_HANDLE 是头文件里面用宏定义的数据类型int 。在返回值选项里面“类型”我们选择“数值”;“数据类型”我们选择int16。值得注意的是,由于C版本众多,而且标准C对于数据类型没有完全规定死,数值的“数据类型”有时候要参看具体的编译器。标准C规定:int不小于16位,long不小于32位。一般可以int选择I16,long选择I32(关于有符号数和无符号数的区别见C,不解释,64机另论)。char*表明传递的字符串,C语言的字符串等价于U8数组,所以“类型”我们选择“数组”;“数据类型”我们选择U8, “数组格式”选择“数组数据指针”。另外三个参数不用多解释。传递的是数值,数据类型选择好就可以了。看起来我们配置好了这个函数,对吧,但是运行就会得到一个-1的结果。-1代表错误。其中的原因在于C语言和labview的不同。C语言里面的字符串是以NULL(\0)结束的,但是labview不是,所以我们要将这个因素考虑进去,具体做法是:使用连接字符串。然后转化为U8,这样就可以啦。顺便解释一下,open的作用是打开串口,原型是C里面的creatfile函数,串口通信的第一个函数,要记得加上\0,否则程序很多会出错误!!值得注意的是,C编译器以及32位机和64位机的差异在Labview调用时也有体现,所以造成实际的调用十分麻烦,要很好的理解C的基础知识!下篇介绍令大家郁闷的指针的调用!

如何从LabVIEW中调用动态链接库DLL

如何从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 API

labview API

12. user32.dll:EnableWindow(窗体的使用/禁用)
13. user32.dll:WindowFromPoint(获取窗体的句柄)
获取当前鼠标指针位置的句柄
• • • • • • • • • •
查找窗口标题并代替它
3. kernel32.dll:GetDiskFreeSpaceA
获取磁盘空间
4. user32.dll:GetCursorPos 5. user32.dll:WindowFromPoint
获取指针位置及句柄,并设置其内容 6. user32.dll:GetWindow 7. user32.dll:ShowWindow(中hwnd的参数可通过指针句柄来获取, wcmdshow参数可参考API浏览器)
获取窗口句柄并显示窗品状态
8. user32.dll:ExitWindowsEx
执行成ቤተ መጻሕፍቲ ባይዱ则返回为非0,否则为0
9. user32.dll:SetWindowPos(设置窗口位置)
10. user32.dll:SetWindowRgn(改变窗口外观) 11. gdi32.dll:CreateRoundRectRgn(画图)
Labview API
1. user32.dll:FindWindowA 2. user32.dll:SetWindowTextA
• • • • 函数的声明: Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Function SetWindowText lib “user32”alias” SetWindowTextA” (ByVal hwnd As ong,Byval lpString As String) AS Long 这个函数有两个参数,第一个是要找的窗口的类,第二个是要找的窗口的标题 在搜索的时候不一 第一个是要找的窗口的类, 第一个是要找的窗口的类 第二个是要找的窗口的标题。在搜索的时候不一 定两者都知道,但至少要知道其中的一个。有的窗口的标题是比较容易得到的,如"计算器",所以 定两者都知道,但至少要知道其中的一个 搜索时应使用标题进行搜索。但有的软件的标题不是固定的,如"记事本",如果打开的文件不同, 窗口标题也不同,这时使用窗口类搜索就比较方便。如果找到了满足条件的窗口,这个函数返回该 窗口的句柄,否则返回0。 前面提到的VB的FindWindow()函数的声明将两个参数都定义为String类型,而在实际使用过程中, 如果我们忽略某个参数就将该参数的定义又As String改为As Any。这里的As Any相当于 语言中 相当于C语言中 相当于 的强制类型转换。例如,如果我们忽略窗口的类,就将定义修改如下: 的强制类型转换 Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As String) As Long 然后,在调用时使用如下语句: hwndCalc = FindWindow(0&, "计算器") 这里的0&就表示忽略类名。需要注意的是FindWindow(0&, "计算器")和FindWindow("", "计算器")有 两种完全不同的含义,前者表示忽略窗口的类,而后者表示窗口的类是个空串。类似的,我们也可 以忽略标题而搜索指定的类。 从上面的讨论中可以看出,如果要搜索的外部程序的窗口标题比较容易得到,问题是比较简单的。 可如果窗口的标题不固定或者根本就没有标题,怎么得到窗口的类呢?如果你安装了Visual C++, 你可以使用其中的Spy++(如果没有VC++,在VB的盘上也可以找到Spy),在Spy++中有一个 FindWindow工具,它允许你使用鼠标选择窗口,然后Spy++会显示这个窗口的类。

LabVIEW 高级教程

LabVIEW 高级教程

第12章LabVIEW与C语言的接口方法
• • • • • 12.1 概述 12.2 CIN节点的参数设置及应用 12.2.1 CIN节点的调用及其端口参数设置 12.2.2 CIN节点的设计步骤 12.2.3 CIN端口的操作及其应用
第13章 LabVIEW的多线程、运行控制技术
• • • • • • • • 13.1 多线程的特点与作用 13.2 LabVIEW多线程的实现与应用 13.1 LabVIEW运行控制的概述 13.2 LabVIEW各种运行控制技术在编写程序过 LabVIEW 程中的应用与举例 13.3 LabVIEW 事件编程技术的应用 13.3.1 Event Structure的使用 13.3.2 Event Structure应用实例 13.3.3 使用Event Structure应注意的问题
14 LabVIEW程序的优化设计
• • • • • • • • • • • • 14.1 LabVIEW的程序优化设计 14.2 LabVIEW的内存管理、VI性能的监测与分析 14.3 LabVIEW程序结构分析 14.3.1 主程序层 14.3.2 测试层 14.3.3 驱动层 14.4 LabVIEW程序优化措施 14.4.1 顺序结构 14.4.2 嵌套结构 14.4.3 驱动程序 14.4.4 轮询循环 14.4.5 数组处理
labviewadvanced第11章labview技术的dll和api调用111dll和api的介绍112调用dll子vi及属性113调用api函数方法114应用举例第12章labview技术的active调用121active的介绍122应用active自动化123应用active容器124activex在多媒体中的应用第12章labview与c语言的接口方法121概述122cin节点的参数设置及应用1221cin节点的调用及其端口参数设置1222cin节点的设计步骤1223cin端口的操作及其应用第13章labview的多线程运行控制技术131多线程的特点与作用132labview多线程的实现与应用131labview运行控制的概述132labview各种运行控制技术在编写程序过程中的应用与举例133labview事件编程技术的应用1331eventstructure的使用1332eventstructure应用实例1333使用eventstructure应注意的问题14labview程序的优化设计141labview的程序优化设计142labview的内存管理vi性能的监测与分析143labview程序结构分析1431主程序层1432测试层1433驱动层144labview程序优化措施1441顺序结构1442嵌套结构1443驱动程序1444轮询循环1445数章 LabVIEW技术的DLL和API 调用

易语言API以及DLL调用方法详解。

易语言API以及DLL调用方法详解。

对于新手易语言用户来说DLL和API很高深很神秘,你今天看了我这个教程,你就不觉得了!!进入正题:我们首先来编写一个易语言的子程序(这个不懂建议去再去看看例子)本子程序的原理就是:传递一个半径给本子程序然后使用公式算出周长后返回一个整数型的周长!!然后我们来调用这个函数:然后程序给编辑框1赋值圆周,然后显示到编辑框!运行程序就是这样了!!其实编写DLL和调用DLL的方式就于编写子程序相似!我们接下来用编写DLL的方式实现!打开易语言!打开易语言就是这样,跟以往不同的是没有窗口设计框!其实也可以添加窗口!!然后我们来编写DLL接口函数,按下ctrl+n然后创建一个子程序,在返回值类型写下整数型然后回车创建一个参数接口!就像这样参数名可以随便填写但是类型不能!因为半径是数字,所以我们设置为整数型。

然后我们创建一个变量周长来保存运行的结果!!因为我们上面返回值设置为整数型,所以我们需要返回一个整数。

返回的是上面?我们需要求周长,我们就返回周长!是不是跟先编写的子程序一样的?最重要的一点是这里必须勾上,因为勾上了这个,外部程序就能调用了!如果不勾上,这个子程序只能供DLL内部调用!然后我们编译起来!然后我们来调用这个DLL,运行易语言,新建一个程序!然后双击这里,我们需要声明程序函数(非常重要);为什么我们要声明呢?因为易语言中没有这个函数,所以我们要求程序调用外部的这个函数来帮助我们完成。

右键,新建一个DLL命令完成了,我们需要做什么呢?我们需要一个参数传递半径!这就是声明好了的DLL,那个文件名为什么只写一个1.dll呢?因为我这个是刚刚写的那个DLL的文件名,为什么不写完整路径呢?在同一目录下或者SYSTREAM32(系统)目录下的DLL都可以不用写上完整路径!那个参数1的类型就是刚刚那个DLL子程序1参数的类型。

必须注意的是,DLL 函数有返回值,所以声明的时候必须写上对应的数据类型!!然后我们就像调用子程序一样调用DLL,在写好代码以后需要保存,看源码路径和DLL路径是否在同一目录。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

LABVIEW的DLL与API调用
一.实验目的
1.熟悉LabVIEW调用动态链接库的过程
2.学会编写用LabVIEW调用WINDOWS的API函数
二.实验器材
1.计算机(带有声卡)
2.LABVIEW8.20软件
三.实验原理
在开发自动测量系统时,经常遇到计算机与仪器的通信问题,涉及仪器控制及数据处理问题,LabVIEW语言在这一领域的应用有着独到的优势。

为了在LabVIEW中能够充分利用其他编程语言的优势,LabVIEW提供了外部程序接口能力,包括动态链接库(DLL)、C语言接口(CIN)、ActiveX和Matlab等。

动态链接库是基于Windows程序设计的一个非常重要的组成部分。

LabVIEW 开发中使用DLL,可以使代码更简洁,内存资源的使用更经济,而且可以便捷地利用仪器厂商或第三方提供的仪器控制子程序加速开发进程。

而windows平台包含有大量的API函数,这些API函数提供了大量在Windows环境下可操作的功能,它们位于Windows系统目录下的多个DLL文件中,因此在LabView中调用API
函数和DLL的方法是一致的。

在LabVIEW中,利用库函数节点可以较容易地实现对DLL的调用,从而提高了程序的开发效率。

使用调用库函数节点,可以调用Windows标准的动态连接库,也可以调用用户自己编制的DLL。

LabView中动态链接库的调用可在程序框图的函数选板中选取“调用库函数节点”来完成,该节点位于:互连接口->库和可执行程序->调用库函数节点。

将选择好的调用库函数节点图标放在程序框图中,然后通过对它的节点图标进行配置,可以指定DLL模块中与LabVIEW数据交换的相应的驱动函数。

在调用DLL时,首先要找到找到头文件(*.h)或者函数原型声明,确定你需要调用的函数,注意函数的参数是否包含了原始数据类型参数比如int,char, double,等等或者是否包含了复杂数据类型比如clusters。

如果函数没有包含复杂数据类型并且你有头文件(*.h),该DLL在数据类型的定义上与LabView一致,那么LabVIEW中一个很好的工具可以帮你简单地导入DLL(并且会帮助你创建DLL的整个库)。

你可以在工具—>导入—>共享库(.dll)...中找到该工具,按照向导进行下去。

如果函数不含有复杂数据类型但是没有头文件(*.h),或者由于DLL编写不够规范,在数据类型的定义上与LabView并不完全一致,你需要确定那些在DLL 中被调用的函数的参数,一旦参数被确定,使调用库函数节点中的函数手动调用该函数。

这是你需要对调用的函数进行手工配置。

在调用DLL库中函数时,必须知道以下信息:函数返回的数据类型、函数调用的方式、函数的参数及类型、DLL库文件的位置等。

右键单击调用库函数图标,在弹出的菜单选项中选择配置...选项,可得到下图所示的配置对话框。

对函数和参数选项卡进行适当的配置就可以完成对DLL的调用。

相关文档
最新文档