Labview DLL调用指南-非常有用

合集下载

LabVIEW平台下调用DLL实现PC_104数据采集

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 调用 C-C++ Dll 详解

LabVIEW 调用 C-C++ Dll 详解

LabVIEW 调用C/C++ Dll 详解LabVIEW 在配上NI 的采集卡或者别的第三方的硬件,约等于神器(虽然有时候贵了点)。

这样你可以比较集中精力的专注于数据处理了,就不用学习麻烦的Win32 的GUI 编程, 也不用关注和你自己搞的采集板之间的通信了。

对于每一个测控行业的程序来说,基本上都是:初始化-->数据采集-->数据处理-->数据显示-->数据保存-->结束的一个过程。

当然如果是实时的,那么采集,处理,显示就是在一个loop 里面。

当然为了保证实时性,数据处理和数据采集不一定在一个线程里,因为处理的时候把采集给block 住也挺傻的。

LabVIEW 很容易帮你搞定:初始化-->数据采集-->数据处理-->数据显示-->数据保存-->结束但是数据处理部分,是和你的学科紧密相关的,有时候算法会诡异到你很难用VI来实现,那么你就要有C++”target=“_blank”>C++code来搞了。

那么C/C++ 是如何与LabVIEW 交互的呢,本文来较详细的阐述一下,因为准备采用总分总的写作手法...所以先来个概括...1. 把C/C++ code 编译成Dll。

2. 用LabVIEW 的call library node 来调用。

难点在于:如何把LabVIEW 的数据类型和C/C++ 的来对应。

控件x 相当与一个double,当然其类型也是可以选择的(如右图所示)。

boolean 按理说应该是一个bool, 但是传入call library node 的时候,一般要转成unsigned int 型。

cluster 其实就是个struct ,左图的cluster 是:struct tCluster{ double x11; // 类型都可以向右图那样自己配置double x2; int x3;};对于string,这里要着重讲一下,labview 的string 类型里面是包含长度信息的,它不是一个简单的char *它是个LStrHandle 类型:定义咋extcode.h 里面(可以在labview 目录下搜到)typedef struct {int32 cnt;uChar str[1];} LStr, *LStrPtr, **LStrHandle;cnt 就是含有多少个字符,str 这个指针所指的就是数据区的第一个字符。

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调用动态链接库

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文件的调用

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的静态链接库。

labview调用dll方法+

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调用C#编写的DLL

如何使用LabVIEW调用C#编写的DLL

如何使用LabVIEW调用c#编写的DLL最近在做一个项目时,需要在Labview中列出可用的磁盘驱动器,我们可以使用互连接口》库与可执行程序》执行系统命令vi,但是在程序运行时会弹出命令提示符窗口,对于计算机菜鸟用户而言,他们或许会以为那是在执行病毒程序,为了增加用户的好感度,本文采用调用DLL的方式来解决问题。

在调用DLL之前,我们先来创建一个DLL,打开VS2008,新建一个类库项目,如下图:点击确定后进入代码编写窗口。

编写好的代码如下图所示:选择VS2008的生成》配置管理器,打开配置管理器,如下图所示:在活动解决方案配置下拉框中选择Release,然后点击关闭。

选择生成》生成DrivesInfoDll,然后生成一个DLL文件。

在项目的的bin\Release目录下面可以找到生成的DLL文件,如下图所示:我们把它复制我要使用它的地方,如下图:现在,打开LabVIEW2012,新建一个VI,切换到程序框图,选择下图的构造器节点到程序框图:此时将自动打开选择.NET构造器:点击浏览按钮,选择要调用的DLL:点击确定后在对象中选择Class1:,如下图所示:点击确定按钮关闭对话框。

选择下图的调用节点到程序框图:将构造器节点的“新引用”输出端与调用节点的“引用”输入端连接起来,然后在调用节点的“方法”上点击,选择我们要使用的方法,这里选择GetDrivesInfo()。

选择下图的关闭引用到程序框图并连接调用节点的“引用输出”输出端到关闭引用的“引用”输入端。

然后创建一个字符串数组,显示GetDrivesInfo方法的执行结果。

完整的程序框图如下:运行后的前面板结果如下:这说明程序是执行成功了的。

利用LabVIEW导入工具实现DLL调用

利用LabVIEW导入工具实现DLL调用

利用LabVIEW导入工具实现DLL调用
郑铭
【期刊名称】《电子测试》
【年(卷),期】2009(000)006
【摘要】本文在介绍了动态链接库程序概念的基础上,以台湾泓格科技股份有限公司ISI-AD32、32通道隔离A/D数据采集卡为例,介绍了在LabVIEW 8.5开发环境下,通过利用LabVIEW开发环境中"导入"工具实现DLL调用方法.该方法克服了程序设计者通常在开发环境中通过CLF节点进行调用繁琐、各种不同类型的变量转换不正确时会造成不能控制的问题,及对类似的硬件提供的LabVIEW驱动版本太低或没有驱动,没有办法控制的问题同样可以解决.该方法简单实用,非常方便快捷,希望广大程序设计广为利用.
【总页数】4页(P33-35,39)
【作者】郑铭
【作者单位】91370部队,福建省福州市,350014
【正文语种】中文
【中图分类】TP312
【相关文献】
1.基于LabVIEW环境下调用DLL实现仪器控制 [J], 侯博;廖醒宇
2.嵌入式LabVIEW调用DLL实现数据采集 [J], 黄佳钰;邓焱;张锦杰
bVIEW平台下调用DLL实现PC/104数据采集 [J], 袁魏华;韩裕生;张伟伟;李
小明
4.基于调用DLL的LabVIEW数据采集的实现 [J], 张亿雄;顾海明
bVIEW 8.6报表工具包生成和调用DLL问题分析及对策 [J], 胡胜文;万加林因版权原因,仅展示原文概要,查看原文内容请购买。

Labview调用dll详解(C语言DLL

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 DLL调用指南-非常有用

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的输入输出端口,如果添加不完整,则需要再手动添加额外的输入端或者输出端。

课程-外部程序接口之调用DLL

课程-外部程序接口之调用DLL

外部程序接口之调用DLL LabVIEW与外部程序接口:LabVIEW作为一种图形化环境的编程语言,功能已经十分强大。

同时,LabVIEW也是一个软件平台:在LabVIEW环境中,我们可以通过LabVIEW提供的丰富接口来调用其他语言的程序。

这些接口包括DLL,C语言接口,ActiveX,.NET,等。

DLL是一种封装好了的函数库,只要遵守DLL的开发觃范和编程方法,任何编译器生成的DLL 都具有通用性。

并且该函数只有在被调用的时候才会被动态的载入内存,节省的内存的开销。

在LabVIEW中,我们可以通过“调用库函数节点”(Call Library Function Node)我们可以方便的调用C,VC,VB等文本语言编写好的程序以及Windows 自带的大量的API函数。

调用C语言DLL:如何在LabVIEW中调用DLL呢?我们首先来看一个例子,请运行附件中的hostname.vi。

得到如图所示的结果:观察程序框图,我们看到通过调用hostname.dll,我们得到了当前计算机的用户名。

接下来我们看一下该调用是如何实现的。

hostname.dll函数的源代码如下:该函数的源代码可以参见hostname.c文件。

根据函数的定义,我们在“调用函数节点”中,配置相应的参数:1.在函数面板中,选择该DLL的路径和具体的函数名。

注:对于不同的DLL函数,需要选择不同的调用觃范。

这里选择C,表示由调用方(LabVIEW)清除堆栈。

2.在参数面板中,配置该函数的输入输出参数。

根据函数定义,这里配置了输入“参数1”,并且定义数据类型为“字符串”。

3.点击确定,完成调用DLL函数。

4.在程序框图中使用“连接字符串”,在得到的计算机名前添加字符串“LabVIEW is running on”,如图参数配置中的数据类型:在“参数”的配置页面中,我们需要根据函数的定义来为添加的输入输出函数选择合适的数据类型。

LabVIEW的调用函数节点提供了丰富的数据类型以供选择:• Numeric• Array• String• Waveform• Digital Waveform• Digital Data• ActiveX• Adapt to Type• Instance Data Pointer在参数的配置过程中,必须根据函数的定义选择LabVIEW中对应的数据类型,否则调用的过程中程序会报错,甚至程序崩溃。

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函数的调用

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调用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

问题:如何从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调用DLL时接口类型匹配简介

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

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

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

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

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

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

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

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

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

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

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

在调用此dl‎l时,对于数组类型‎,在“Array format‎”中设置为Ar‎r ay Data Pointe‎r。

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

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

在调用此dl‎l时,在“Array format‎”中选择Arr‎a y Handle‎Pointe‎r即可。

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

5、二维数值数组‎当参数为二维‎数值数组的时‎候,在LabVI‎E W下生成d‎ll时类型只‎能选择为指向‎句柄的指针。

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

【LabVIEW】构造器节点调用C#动态链接库dll

【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,数据类型是数组,删掉这个传⼊参数就不报错了,但其他函数同样传⼊参数⼜不报错...个例先记录下来,原因待查。

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

【转】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的输入输出端口,如果添加不完整,则需要再手动添加额外的输入端或者输出端。

需检查DBL输入:Value;DBL输出Pointer to Value。

3)务必给DLL的每个输出端添加初始值,否则DBL数组没有输出。

len、len2分别为输入数组、输出数组的个数,需将这两个参数设置为与实际的数组大小一致。

4)C调用,具体为什么选择C调用,可参考:
Calling convention 用于指明被调用函数的调用约定。

这里只支持两种约定:stdcall 和C call。

它们之间的区别在于,stdcall 由被调用者负责清理堆栈;C call 由调用者清理堆栈(在LabVIEW中调用该DLL,则选择C调用)。

这个设置错误时,可能会引起LabVIEW 崩溃,所以一定要小心。

反过来说,如果LabVIEW 调用DLL 函数时出现异常,首先就可以考虑这个设置是否正确。

(Windows API 一般使用的都是stdcall;标准C的库函数大多使用C call。

如果函数声明中有类似__stdcall 这样的关键字,它就是stdcall 的。

)具体链接为:
/forum/viewthread.php?tid=255&extra=&page=9
另外,也可以这样理解。

对库函数的调用规则,选择stdcall。

比如调用凌华的数据采集卡驱动提供的DLL,则选择stdcall调用规范。

调用自己用C语言写的程序而后编译成DLL文件时,调用规范选择“C”。

5)选择哪种线程?
选择Run in UI thread,具体为什么选择该界面线程(Run in UI thread),可参考如下链接:
/2007/01/26/labview-%e7%a8%8b%e5%ba%8f%e4%b8 %ad%e7%9a%84%e7%ba%bf%e7%a8%8b-4-%e5%8a%a8%e6%80%81%e8%bf%9e %e6%8e%a5%e5%ba%93%e5%87%bd%e6%95%b0%e7%9a%84%e7%ba%bf%e7%a 8%8b/
6)如果动态调用,则必须设置调用DLL的那个VI。

设置该VI的执行系统不能够为“User Interface”。

如果是静态调用,则可不用设置该项。

关于调用DLL导致LabVIEW崩溃的解决办法,可参考如下链接:
/public.nsf/allkb/C48880127BDB18B5482571BC00289A23
4. 生成DLL的两种方式
1). LabVIEW环境
不过多赘述。

在DLL和LabVIEW之间传递参数,最常用的三种数据类型是:数值类型、字符串、数值型数组。

2 )VC等环境
以VC环境为例,参考一个例子解释:
/blog/static/70113974200911225944903
此例子讲述了如何在VC中建立DLL,以及如何在VC中使用DLL。

5.动态链接库
1)静态库和动态库
静态库:函数和数据被编译成一个二进制文件(一般为LIB格式),在使用静态库编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其他的模块组合起来创建最终的可执行文件(EXE文件)。

动态库:在使用动态库时,往往提供两个文件:引入库(.lib)和一个DLL(.dll)文件。

该引入库不同于静态库,因为引入库文件包含了该DLL导出的函数和变量的符号名,而.dll 文件包含该DLL实际的函数和数据。

在使用动态库编译链接可执行文件时,只需要链接该DLL的引入库文件,该DLL中的函数代码和数据并不复制到可执行文件中,直到可执行程序运行时,才去加载所需的DLL。

2)使用动态链接库的好处
动态链接库通常不能直接运行,也不能接收消息。

它们是一些独立的文件,其中包含了能被可执行程序或其他DLL调用来完成某项工作的函数。

只有在被调用时,才被载入内存。

如果多个应用程序同时调用该DLL,则在内存中只需载入一次,从而避免多个应用程序调用相同DLL时内存资源的浪费。

相关文档
最新文档