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调用cdll文件之获取电脑开机时间

LabVIEW调用cdll文件之获取电脑开机时间LabVIEW调用c# dll文件之获取电脑开机时间
最近因项目需求,客户要求LabVIEW实现获取电脑开机时间,通过这个小程序,我们可以展开讨论一下LabVIEW调用c# 生成的dll。
话不多说,直接上干货,我总结了一下几个方法。
1. CMD指令获取电脑开机时间。
首先我们利用系统自带的cmd.exe进行第一步验证。
CMD指令
Windows+R输入CMD,进入命令行;
systeminfo指令
接着输入systeminfo,便可查询开机时间,验证可知试验成功。
接下来我们要通过编程来实现,
然后我们把得到的时间通过字符串匹配函数匹配出来就可以了。
电脑开机时间
把开机时间提取出来后,就可以做后续工作了。
当然也有一种方式就是利用LabVIEW中的获取电脑当前时间函数,来减去运行时间,这样也可以获得,但这种方式有时会出现不准确的现象,不推荐使用。
这是两种很简单的获取电脑开机时间,但是这样有一个缺点就是CMD指令查询时间非常慢,所以我们就用了以下方法。
2. 调用c# dll文件
先通过visual studio创建一个C#的ClassLibrary文件,编写如下代码:
运行后,会在Debug文件夹中生成相应的dll文件。
利用LabVIEW调用库函数配置好后直接输出开机时间。
LabVIEW爱好者小豪原创。
关于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实现PC

LabVIEW平台下调用DLL实现PC/104数据采集 ADT700文章发布人:gxy 共243人阅读文字大小:[ 大中小 ] 文字背景色:Using DLL for PC-104 Data Acquiring in LabVIEW Platform摘要:LabVIEW是一个高效的图形化软件开发环境,在数据采集和测试测量中应用广泛。
但在PC-104硬件平台下使用LabVIEW实现数据采集,由于NI公司没有提供相应的设备驱动程序,对程序设计造成障碍。
在分析动态链接库调用机制的基础上,论述LabVIEW平台下调用DLL实现PC/104数据采集的关键技术。
给出了使用ADT700数据采集卡的具体实现方法。
试验表明系统效果良好运行稳定,满足要求。
关键词:LabVIEW 动态链接库PC/104 数据采集Abstract: As a high efficiency graphical soft development envirment, LabVIEW is used in data acquiring and testing and measuring extensively. Because NI (National Instruments) company doesn’t support driver for other company’s card, there is an obstacle in programming by labVIEW in PC/104 system. By analyzed the mechanism of Dynamic Link Library (DLL), this paper introduced the key technique of drivingPC/104 data acquiring card on LabVIEW platform by using DLL. Given a concretely method of using ADT700. Test result show the system can work effectively and stably, satisfied the design desire.Keywords: LabVIEW; Dynamic Link Library; PC/104; data acquiring1 概述虚拟仪器[1]技术VI(virtual instruments)是National Instruments公司在其产品LabVIEW中首先提出的创新概念。
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中调用VC++生成的动态链接库文件DLL

LabVIEW中调用VC++生成的DLL1.// 新建一个空的Win32 Dll 工程,加入新的cpp,写入下面代码_declspec(dllexport) int sum(int a, int b){return a+b;}//Build出一个dll:sum.dll2.// 新建一个新的Win32 Console程序//选择Simple Console Application,修改main函数所在的cpp#include "stdafx.h"#include <iostream>using namespace std;// for base type and LoadLibrary#include <WINDOWS.H>// define function pointer which will point to sum(a, b)typedef int(*Func)(int,int);int main(int argc, char* argv[]){HMODULE dll = ::LoadLibrary("sum.dll");// 加载刚才那个dll,路经要对if(dll){Func f = (Func)GetProcAddress(dll, ?sum@@YAHHH@Z);// 加载那个sum函数if(f)cout<<f(3, 4); // 等价于调用sum(3, 4)elsecout<<"function call error";}elsecout<<"lodad error";}//Build & Execute3.上面一个不便的地方就是GetProcAddress,第二个参数是个很复杂的字符串,需要事先用dumpbin sum.dll /exports得到sum函数的实际名称所以,一般会在最上面写dll时,导出函数前面不仅加上已有的红字表示导出,还要加上extern "C" ,表示以C方式编译,因为C方式编译时,函数名在库中和在程序代码中会保持一致,不像C++生成新的编码后的函数名。
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文件的调用

图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的静态链接库。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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,
};
/*******************************************************************************
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 文件 孤雁寒山‐2013‐6‐23
一、概述 Labview 编程时,有些情况利用调用 Dll 文件可以方便实现工程的开发。文档通过实践,
设计了一个基于 Dll 文件,实现 crc16 校验的方法。介绍了 Dll 文件生成和 labview 调用的方 法。供各位参考实现调用 Dll 文件的方法。 二、Dll 文件创建
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
/************************ FUNCTION ***********************************/
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
Labview 调用 Dll 文件 孤雁寒山‐2013‐6‐23
设置参数,使形参与返回值函数一致。
框图设计及运行结果
Labview 调用 Dll 文件 孤雁寒山‐2013‐6‐23
附录:
本附录为DLL工程的源代码,可直接复制粘贴到工程内即可。
extern "C" __declspec(dllexport) unsigned int CRC16(void *pbuf, unsigned char len) ;
二、创建 Labview 引用 Dll 文件 1)选择调用Dll程序接口“调用库函数”
2)设置调用库函数 双击控件,修改函数名,使其与 Dll 文件中设置的 extern "C" __declspec(dllexport) unsigned int CRC16(void *pbuf, unsigned char len) ; 文件名一直,即填写 CRC16.并选择 Dll 工作目录。
0x88,0x48,0x49,0x89,0x4B,0x8B,0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,
0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,0x43,0x83,0x41,0x81,0x80,0x40,
0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,0x1E,0xDE,0xDF,0x1F,0xDD,0x1D,0x1C,0xDC,
0x14,0xD4,0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,0x11,0xD1,0xD0,0x10,
};
/*******************************************************************************
* Function Name : CRC16
* Description : Calculate CRC.
* Input
: None
* Output
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,
// 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) ;
0x00,0x,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,
0xA0,0x60,0x61,0xA1,0x63,0xA3,0xA2,0x62,0x66,0xA6,0xA7,0x67,0xA5,0x65,0x64,0xA4,
0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68,
*******************************************************************************/
const unsigned char CRC_TABLE_H[256]=
{
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
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,
* Variable Name : CRC_TABLE_L
* Description : CRC Table.
*******************************************************************************/
const unsigned char CRC_TABLE_L[256]=
: None
* Return
: None
*******************************************************************************/
unsigned int CRC16(void *pbuf, unsigned char len)
{
extern "C" __declspec(dllexport) unsigned int CRC16(void *pbuf, unsigned char len) ;
工程代码请参考附录. 5)编译运行后即可在工程设置目录下生成Dll文件。
Labview 调用 Dll 文件 孤雁寒山‐2013‐6‐23
)
{
return TRUE;
}
/*******************************************************************************
* Variable Name : CRC_TABLE_H
* Description : CRC Table.
0xF0,0x30,0x31,0xF1,0x33,0xF3,0xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4,
0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,0x3B,0xFB,0x39,0xF9,0xF8,0x38,