精华内容
下载资源
问答
  • Labview调用C++ Dll

    2016-04-06 17:01:50
    Labview调用C++ Dll,关于Labview如何生成Dll,可以搜楼主其他上传资源
  • LabVIEW如何调用DLL

    千次阅读 2015-09-22 22:14:32
    How Do I Call a Dynamic Link Library (DLL) from LabVIEW? Hardware: PXI/CompactPCI>>Controllers Problem:  How do I call a DLL from LabVIEW? Solution:  To...

    How Do I Call a Dynamic Link Library (DLL) from LabVIEW?



    Hardware: PXI/CompactPCI>>Controllers

    Problem: 
    How do I call a DLL from LabVIEW?

    Solution: 
    To call a Dynamic Link Library (DLL) from LabVIEW see the help section Calling Code Written in Text-Based Programming Languages.  The help section contains additional information not included in this document.  To call a DLL,  you first must identify what type of DLL it is.  There are essentially two types of DLL's to consider: C/C++ DLL and a Microsoft .NET assembly.  A C/C++ DLL can be generated from C, C++, or any other programming language (besides .NET languages) such as Java, Fortran, or Visual Basic 6.0.  A .NET DLL is also called a .NET assembly or just assembly.  The reason for this terminology difference is that a .NET DLL does not work the same way as other DLL's.  A .NET DLL uses the Common Language Runtime (CLR) and the .NET Framework to manage the functions within the DLL.

    If the DLL is a C/C++ DLL:
    1. Find the header file (*.h) or function prototype definitions.
    2. Identify the function(s) you wish to call.  Notice whether the parameters for the function contain primitive data type parameters such as int, char, double, etc or whether they contain complex data types such as structs, arrays or vectors.
    3. If the function does not contain any complex data types and you have a header file (*.h), a great tool in LabVIEW can help you easily import the DLL (and it will create an entire library for the DLL).  You can find this option in Tools»Import»Shared Library (.dll)...  Continue with the wizard.
    4. If the function does not contain any complex data types and you do not have a header file (*.h), first ensure that you are dealing with a C/C++ DLL as most programming environments will generate a header file along with the DLL.  If you are in fact dealing with a C/C++ DLL, find the documentation for the function as you will need to identify the parameters for the function you wish to call inside of the DLL.  Once you have identified the parameters, use the Call Library Function Node function in LabVIEW to manually call the function.
    5. If the function(s) you wish to call contains complex data types, you need to manually use a Call Library Function Node function in LabVIEW to directly call the DLL, defining the prototype within the configuration dialog (if the DLL has been compiled with a Type Library, parameter data and return types will be defined automatically).  Note that if your complex data type is a struct with more than primitive data types (int, double, char), it is easiest to create a wrapper DLL from a C-based language.  

      Since C/C++ constructs do not always directly correlate to LabVIEW data types, a wrapper DLL can appropriately extract the contents of the complex structure and translate them to primitive terms.  For instance, if you have a struct in C which contains a char * (a string or character array), you can create a wrapper function which LabVIEW will call that takes in a char * type directly, puts that into a structure, and then in turn calls the DLL.  Note that if you have the DLL source code, you can directly modify the DLL so that it takes in a char * instead of the struct.
    Note: There is a very helpful example in the Labview Example finder that explains how to handle several different data types to be used with the Call Library Function Node. The example is named Call DLL.vi. Refer to this example when dealing with complex data types such as arrays or structs. To Find this example go to the LabVIEW Example Finder (Help»Find Examples) and select the Directory Structure radio button. In the directories list, select dll and then data passing then Call Native Code.llb. The Call DLL.vi example is under that directory.  

    To view the example for a data type, select the data type in the Data Type list.  Then 
    展开全文
  • LABVIEW调用DLL方法

    2018-04-12 16:37:58
    如何通过LABVIEW调用DLL,适用于采用LABVIEW调用一些外部模块接口
  • 转自:http://bbs.elecfans.com/jishu_469502_1_1.htmlLabVIEW调用DLL文件LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用。比如,在实际的工程项目中,用户可以用C++语言实现软件的运算部分,并把这些功能...

    转自:http://bbs.elecfans.com/jishu_469502_1_1.html

    LabVIEW调用DLL文件

    LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用。比如,在实际的工程项目中,用户可以用C++语言实现软件的运算部分,并把这些功能构建在DLL文件中,然后再使用 LabVIEW编写程序的界面部分,并通过调用编写好的DLL来调用运算部分的功能。

    LabVIEW 中是通过Call Library Function Node(CLN)节点来完成DLL文件调用的。创建一个新的VI,右击程序框图,在Functions Palette中依次选中Connectivity——Libraries&Executables工具栏即可找到该节点(图1)。

    1.jpg (24.15 KB, 下载次数: 2)

    2015-2-12 11:22 上传

    图1 Call Library Function Node

    将节点放置在程序框图中,双击会出现它的配置对话框,共有四页。第一页用于填写被调用函数的信息(图2)。Library name or path需给出DLL文件名和路径,操作系统路径下的DLL文件,直接输入文件名也可调用,否则必须输入全路径。在这里已经给出名字的DLL是被静态加载到程序中的,也就是说当调用了这个DLL的VI被装入内存时,DLL同时被装入内存。LabVIEW也可动态加载DLL,只要勾选上Specify path on diagram的选项即可。选择了这个选项,在 Library name or path中输入的内容就无效了,取而代之的是CLN 节点多出一对输入输出,用于指明所需要使用的DLL的路径。这样,当VI被打开时,DLL不会被装入内存,只用程序运行到需要使用这个DLL中的函数时,才把其装入内存。Function name是需要调用的函数的名称,LabVIEW会把DLL中所有的暴露出来的函数都列出,用户只要在下拉框中选取即可。Thread栏用于设定哪个线程里运行被调用的函数。用户可以通过 CLN 节点的配置面板来指定被调用函数运行所在的线程。CLN 的线程选项非常简单,只有两项: Run in UI thread和Run in any thread。LabVIEW的程序框图上直接可以看出一个 CLN节点是选用的什么线程。如果Run in UI thread,节点颜色是橙色的;Run in any thread则是浅黄色的(图3)。

    2.jpg (17.07 KB, 下载次数: 0)

    2015-2-12 11:22 上传

    图2 填写被调用函数信息

    3.jpg (6.68 KB, 下载次数: 0)

    2015-2-12 11:23 上传

    图3 CLN不同线程对比

    通常情况下,除非使用的动态链接库是多线程安全的,CLN 中选择Run in any thread方式;否则必须选择Run in UI thread方式。判断一个动态链接库是不是多线程安全的,需通过以下方法:如果一个动态链接库的文档中没有明确说明它是多线程安全的,那么就要当作是非多线程安全的;在可以看到动态链接库源代码的条件下,如果代码中存在全局变量、静态变量或者代码中看不到有lock一类的操作,那么这个动态链接库也就肯定不是多线程安全的。

    选择了Run in any thread方式,LabVIEW会在最方便的线程内运行动态链接库函数,且一般会与调用它的VI在同一个线程内运行。因为LabVIEW是自动多线程的语言,它也很可能会把动态链接库函数分配给一个单独的线程运行。如果程序中存在没有直接或间接先后关系的两个CLN节点,LabVIEW很可能会同时在不同的线程内运行它们所调用的函数,也许是同一函数。对于非多线程安全的动态链接库,这是很危险的操作。很容易引起数据混乱,甚至是程序崩溃。

    选择Run in UI thread方式,因为LabVIEW只有一个界面线程,所以如果所有的CLN设置都是界面线程,那么就可以保证这些CLN调用的函数肯定全部都运行在同一线程下,肯定不会被同时调用。对于非多线程安全的动态链接库,这种方式就保证了它的安全。

    让我们回到配置对话框第一页,Calling convention用于指明被调用函数的调用约定。这里只支持两种约定:stdcall和C call。它们之间的区别在于,stdcall由被调用者负责清理堆栈,C call由调用者清理堆栈。这个设置错误时,可能会引起LabVIEW崩溃,也就是说如果LabVIEW调用DLL函数时出现异常,首先应该考虑这个设置是否正确。(Windows API一般使用的都是stdcall;标准C的库函数大多使用C call。如果函数声明中有类似__stdcall这样的关键字,它就是stdcall的。)第二页是函数参数的配置(图4)。

    4.jpg (13.76 KB, 下载次数: 0)

    2015-2-12 11:23 上传

    图4 配置函数的参数

    DLL和LabVIEW之间传递参数,最常用的三种数据类型是数值、数值型数组和字符串。C语言中经常把指针或者数据的地址在函数间传递,在32位操作系统中,可以使用int32数值来表示指针。因此,当需要在LabVIEW中传递指针数据时,可以使用I32或U32数值类型来表示这个地址类型的数据。但是,64位的程序中,数据的地址只能使用I64或U64来表示。这样,如果一个调用了DLL函数的VI,并且函数参数中有地址型数据,使用固定数据类型的数值来表示地址,就要准备两份代码。解决方法是使用LabVIEW中的新的数据类型Pointer-sized Integer。这个数据类型的长度在不同的平台上会自动使用32位或64位长度。如果在C语言函数参数声明中有const关键字,可以选中Constant选项。布尔类型在DLL函数和LabVIEW VI之间传递没有专有的数据类型,是利用数值类型来传递的。输入时先把布尔值转变为数值,在传递给DLL函数;输出时再把数值转为布尔值。对于数组的传递,LabVIEW只支持C数据类型中的数值型数组,传递数组类型需要注意的的是“Array Format”要选择“Array Data Pointer”。这个设置中还有其他两个选项,带有“Handle”的参数类型都是表示LabVIEW定义的特殊类型的。在第三方的DLL中不会使用到数组参数作为输出值时,要记得为输出的数组数开辟空间。开辟数据空间的方法有两种:第一种方法,创建一个长度满足要求的数组,作为初始值传递给参数,输出数的数据就会被放置在输入数组的所在的内存空间内。第二种方法是直接在参数配置面板上进行设置。在Minimum size中写入一个固定的数值,LabVIEW就会按此大小为输出的数组开辟空间。在 Minimum size 中选择函数的其它数值参数,而不是固定数值。这样LabVIEW会按照当时被选择的参数值的大小来开辟空间。字符串与使用与数组是非常类似的,实际上在C语言中字符串就是一个I8数组。

    在NI软件的安装路径下打开当前使用版本的LabVIEW文件夹,通过 examples\dll\data passing\Call NativeCode.llb找到简单数据类型在LabVIEW与C之间的对应关系。部分常见关系见表1。

    5.jpg (39.05 KB, 下载次数: 0)

    2015-2-12 11:23 上传

    6.jpg (19.95 KB, 下载次数: 0)

    2015-2-12 11:23 上传

    7.jpg (33.51 KB, 下载次数: 0)

    2015-2-12 11:23 上传

    8.jpg (45.04 KB, 下载次数: 0)

    2015-2-12 11:23 上传

    表1 数据类型对比

    第三页用于为DLL设置一些回调函数,可以使用这些回调函数在特定的情形下完成初始化、清理资源等工作(图5)。

    9.jpg (15.24 KB, 下载次数: 0)

    2015-2-12 11:24 上传

    图5 设置回调函数

    如果为Reserve选择了一个回调函数,那么当一个新的线程开始调用这个DLL时,这个回调函数首先被调用。可以利用这个函数为新线程使用到的数据做初始化工作。线程在使用完这个DLL之后,它会去调用Unreserve中指定的回调函数。Abort中指定的函数用于VI非正常结束时被调用,也就是让一个程序在运行完前停止。这些回调函数的原型在Prototype for these procedures中列出,必须要由DLL的开发者按照特定的格式实现。如果使用的DLL不是专为LabVIEW设计的,一般不会包含这样的回调函数。

    第四页是错误处理方式,用户可根据需要选择相应的错误检查级别。

    另外还需要注意的是,C语言中的struct在LabVIEW中可以使用cluster来表示,但有时需要作出相应的调整。这是因为在C语言中,struct的字节对齐是可以进行设置的,这就决定了其各元素的存放地址的可变性。C语言中的对字节对齐数可通过#pragma pack指令或在工程属性中进行指定。而在LabVIEW的cluster中,所有元素只能是1字节对齐的,所以如果要和C语言中非1字节对齐的struct对应,需要做出一些调整。比如,对于C语言中2字节对齐的struct,第一个元素如果是I8型的,在LabVIEW的cluster中第一个元素对应不变,但不能紧挨着放第二个元素,必须留一个无意义的空位。C语言的struct其实也是如此,只不过没有表现出来。所以为了方便,如果自己用C语言生成DLL文件供LabVIEW调用最好将struct都设为1字节对齐。C语言的struct中可以嵌套数组,但是这和LabVIEW中含有数组元素的cluster是不一样的,LabVIEW中需要将数组中的元素都拆开放入cluster中。

    如果C语言的struct中含有一个指针,LabVIEW中的cluster只能用一个U32数值(32位系统上,64位系统上使用U64)来表示指针的地址,而不能将指针所指向的内容放到Cluster中去。如果声明的是指向struct的指针,才能在LabVIEW中使用cluster与之对应。CLN节点的配置面板中,没有一个专门命名的“struct”或者“cluster”参数类型,应选择“Adapt to Type”就可以了。如果参数的类型就是结构而非指针,考虑到C函数参数的压栈顺序,把一个结构体作为参数传给函数,相当于把结构中每个元素分别作为参数传递给函数。图6为C语言中struct和LabVIEW中cluster的部分匹配图。

    10.jpg (20.07 KB, 下载次数: 0)

    2015-2-12 11:24 上传

    图6 struct和cluster匹配

    LabVIEW打包DLL文件

    我们接下来学习如何使用LabVIEW来打包一个DLL文件。

    首先我们编写一个名为Scale.vi的程序,功能很简单就是对输入的数据乘上10,然后再输出(图7)。

    11.jpg (18.08 KB, 下载次数: 0)

    2015-2-12 11:24 上传

    图7 scale.vi

    必须在任务管理器中才能生成.dll文件。所以我们首先建立一个project,过程如下:

    点击File>>New Project:

    12.jpg (20.14 KB, 下载次数: 0)

    2015-2-12 11:24 上传

    图8 生成新项目

    接着弹出是否将该VI添加到新项目的对话框:

    13.jpg (13.71 KB, 下载次数: 0)

    2015-2-12 11:24 上传

    图9 是否添加VI到新建项目

    选择Add,生成新的项目管理器,将其保存在需要的路径下:

    14.jpg (16.51 KB, 下载次数: 0)

    2015-2-12 11:24 上传

    图10 项目管理器

    右键单击项目浏览器窗口中的Build Specifications,在快捷菜单中选择New>>Shared Library(DLL),弹出对DLL文件进行设置的对话框。点击Category>>Information,根据自己需求修改Build specification name和Target filename:

    15.jpg (16.02 KB, 下载次数: 0)

    2015-2-12 11:25 上传

    图11 Information页面

    点击Source Files>>Project Files>> Scale.vi>> ,弹出对话框,直接用默认值,点击OK:

    16.jpg (18.16 KB, 下载次数: 0)

    2015-2-12 11:25 上传

    图12 Define VI Prototype

    点击Destination>> Scale.dll,点击 ,可选择需要保存的路径。然后再点击Support Directory,这是指明了DLL支持文件的路径(比如数据文件之类的放在哪个文件夹),选择默认即可:

    17.jpg (14.52 KB, 下载次数: 0)

    2015-2-12 11:25 上传

    图13 Destination页面

    Category中的Source Files可供用户对打包VI的属性和密码做一些设置;Advanced和Additional Exclusions可以做一些高级的设置,这些均按默认值即可。Version Information可让用户填写版本号、名称、版权、公司等信息:

    18.jpg (19.1 KB, 下载次数: 0)

    2015-2-12 11:25 上传

    图14 Version Information

    点击Run-Time Languages,可对支持语言进行选择,默认即可。点击Preview>>Generate Preview,可以预览到结果:

    19.jpg (16.45 KB, 下载次数: 0)

    2015-2-12 11:25 上传

    图15 预览生成

    点击Build,弹出生成状态对话框:

    20.jpg (13.28 KB, 下载次数: 0)

    2015-2-12 11:25 上传

    图16 生成状态框

    点击Done,生成完成,打开DLL文件保存的路径查看:

    21.jpg (28 KB, 下载次数: 0)

    2015-2-12 11:26 上传

    图17 DLL文件保存路径

    LabVIEW调用DLL文件

    LabVIEW可以方便地调用DLL文件,这些DLL文件可以是其他编译工具,如VC,生成的。

    LabVIEW可以直接通过CLN节点来调用DLL文件,以前面生成的Scale.dll文件为例。现有一个内部定时连续采集程序,通过调用该DLL文件,使读取的值为实际采集值的10倍(图18)。

    22.jpg (14.89 KB, 下载次数: 0)

    2015-2-12 11:26 上传

    图18 连续采集程序

    方法一

    在程序框图放入Call Library Function Node,双击弹出对话框。在Function页面的Library name or path中给入生成的Scale.dll文件的路径,Function name选择Scale,其他选项默认。

    23.jpg (21.43 KB, 下载次数: 0)

    2015-2-12 11:26 上传

    图19 Function页面

    由于是LabVIEW生成的DLL文件,在Parameters页面不需要做改动,但是由于VI还有一路输出,所以还需要添加一个参数y,作为DLL文件的输出。

    如果是C语言等非LabVIEW生成的DLL函数,需要将retuen type的type选项和Data type选项改成函数定义的参数类型,对于函数里输入的参数也都需要自行添加。Callbacks和Error Checking则不需要改动。

    24.jpg (25.39 KB, 下载次数: 0)

    2015-2-12 11:26 上传

    图20 Parameters页面

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

    25.jpg (15.98 KB, 下载次数: 0)

    2015-2-12 11:26 上传

    图21 完成后的程序

    方法二

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

    26.jpg (33.08 KB, 下载次数: 0)

    2015-2-12 11:27 上传

    图22 生成Import Shared Library对话框

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

    27.jpg (15.83 KB, 下载次数: 0)

    2015-2-12 11:27 上传

    图23 选择DLL文件路径和头文件路径

    点击Next,如果DLL文件中依赖其他的一些DLL文件,需要在Include Paths中填写这些文件的路径。其他选项可以根据客户需求设置,一般默认即可。这样一直点击Next到最后,选择Open the generated library,点击Finish。这样可以生成一个.lvlib格式的库文件,里面包含了Scale.vi,这是将调用该DLL文件的方法封装好的VI,只留下输入和输出接口,方便运用到LabVIEW的程序中。直接将Scale.vi拖放到刚才的连续采集中即可完成方法一的功能。

    28.jpg (14.56 KB, 下载次数: 0)

    2015-2-12 11:27 上传

    图24 完成的程序

    VC调用LabVIEW生成的DLL文件

    刚才介绍了LabVIEW调用DLL文件的方法,使用VC调用LabVIEW生成的DLL文件也很简单。还是以之前生成Scale 的DLL文件为例,不同的是采集电压程序使用的是C语言的例程,但和LavVIEW实现的功能相同。

    首先将先前生成Scale DLL文件时,路径下所有的文件全部复制粘帖到C语言例程的文件夹下。打开连续采集程序,点击状态栏的Project——Settings,在Project Settings对话框中加载入Scale.lib的静态链接库。

    在程序中键入#include "Scale.h",以便引入该DLL函数。下面是C程序的代码,功能是有限点采集电压,通过Scale.dll文件实现采样值放大10倍的功能。加粗部分是因为调用DLL文件所做的改动。

    1 #include2 #include "NIDAQmx.h"

    3 #include "Scale.h"

    4

    5 #define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else

    6

    7

    8

    9 int main(void)10

    11 {12

    13 int32 error=0;14

    15 TaskHandle taskHandle=0;16

    17 int32 read;18

    19 float64 data[1000];20

    21 char errBuff[2048]={'\0'};22

    23 int i=0;24

    25 double x10=0;26

    27

    28

    29

    30

    31 /*********************************************/

    32

    33 //DAQmx Configure Code

    34

    35 /*********************************************/

    36

    37 DAQmxErrChk (DAQmxCreateTask("",&taskHandle));38

    39 DAQmxErrChk (DAQmxCreateAIVoltageChan(taskHandle,"Dev1/ai0"/*Config correct device*/,"",DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL));//40

    41 DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,"",10000.0,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,1000));42

    43

    44

    45 /*********************************************/

    46

    47 //DAQmx Start Code

    48

    49 /*********************************************/

    50

    51 DAQmxErrChk (DAQmxStartTask(taskHandle));52

    53

    54

    55 /*********************************************/

    56

    57 //DAQmx Read Code

    58

    59 /*********************************************/

    60

    61 DAQmxErrChk (DAQmxReadAnalogF64(taskHandle,1000,10.0,DAQmx_Val_GroupByChannel,data,1000,&read,NULL));62

    63

    64

    65 printf("Acquired %d points\n",read);66

    67

    68

    69 for(i=0;i<1000;i++){70

    71 Scale(data, &x10);72

    73 printf("the %d Value is : %f \n",i,x10);74

    75

    76

    77 }78

    79 Error:80

    81 if( DAQmxFailed(error) )82

    83 DAQmxGetExtendedErrorInfo(errBuff,2048);84

    85 if( taskHandle!=0) {86

    87 /*********************************************/

    88

    89 //DAQmx Stop Code

    90

    91 /*********************************************/

    92

    93 DAQmxStopTask(taskHandle);94

    95 DAQmxClearTask(taskHandle);96

    97 }98

    99 if( DAQmxFailed(error) )100

    101 printf("DAQmx Error: %s\n",errBuff);102

    103 printf("End of program, press Enter key to quit\n");104

    105 getchar();106

    107 return 0;108

    109 }

    所以,使用LabVIEW不仅可以方便地调用各种编译软件生成的DLL文件,自己也能生成DLL文件供其他编译软件调用。这样,用户在编写大型项目时更加灵活,也为熟悉C语言的工程师提供了巨大的方便。本文只对LabVIEW和VC相互调用DLL文件做了简单的介绍,很多高级功能和技巧,用户可以在实际运用中逐渐掌握。

    展开全文
  • 在很多时候我们会用C语言写一些计算机的底层驱动,比如USB数据传输或者 串口数据传输,如何把我们自己写的驱动程序集成到LABVIEW中呢?下面我就用图和简单说明的方式给大家说说,由于我也是初学,所以有的地方可能会...

    前言:

    LABVIEW是一个强大的图形编程语言,使用很简单,就是你没有任何编程经 验也可以LABVIEW编程,对于需要快速上手图形编程的人是一个不错的选择。在很多时候我们会用C语言写一些计算机的底层驱动,比如USB数据传输或者 串口数据传输,如何把我们自己写的驱动程序集成到LABVIEW中呢?下面我就用图和简单说明的方式给大家说说,由于我也是初学,所以有的地方可能会有错 误或不准确的地方,欢迎大家指正,废话不多说了,下面开始正式的教程。

    目的:

    通过一个现成的I2C适配器控制I2C接口的AM2311温湿度传感器,将测得的温度和湿度用LABVIEW显示出来,最终效果如图所示。

    温湿度数据显示效果图:

    准备:

    1、安装LABVIEW2010。

    2、Ginkgo I2C适配器1台。

    3、Ginkgo I2C适配器上位机驱动函数库,和函数库头文件。

    4、AM2311传感器模块一台。

    第一步:

    打开LABVIEW2010,按下图导入我们需要使用的DLL文件。

    详细的操作说明见附件内容。

    展开全文
  • LabVIEW调用DLL文件  LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用。比如,在实际的工程项目中,用户可以用C++语言实现软件的运算部分,并把这些功能构建在DLL文件中,然后再使用 LabVIEW编写程序的...
    转自:http://bbs.elecfans.com/jishu_469502_1_1.html
     
    LabVIEW调用DLL文件
      LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用。比如,在实际的工程项目中,用户可以用C++语言实现软件的运算部分,并把这些功能构建在DLL文件中,然后再使用 LabVIEW编写程序的界面部分,并通过调用编写好的DLL来调用运算部分的功能。
      LabVIEW 中是通过Call Library Function Node(CLN)节点来完成DLL文件调用的。创建一个新的VI,右击程序框图,在Functions Palette中依次选中Connectivity——Libraries&Executables工具栏即可找到该节点(图1)。
    <ignore_js_op>

    1.jpg (24.15 KB, 下载次数: 2)

    下载附件  保存到相册

    2015-2-12 11:22 上传

     
    图1 Call Library Function Node
      将节点放置在程序框图中,双击会出现它的配置对话框,共有四页。第一页用于填写被调用函数的信息(图2)。Library name or path需给出DLL文件名和路径,操作系统路径下的DLL文件,直接输入文件名也可调用,否则必须输入全路径。在这里已经给出名字的DLL是被静态加载到程序中的,也就是说当调用了这个DLL的VI被装入内存时,DLL同时被装入内存。LabVIEW也可动态加载DLL,只要勾选上Specify path on diagram的选项即可。选择了这个选项,在 Library name or path中输入的内容就无效了,取而代之的是CLN 节点多出一对输入输出,用于指明所需要使用的DLL的路径。这样,当VI被打开时,DLL不会被装入内存,只用程序运行到需要使用这个DLL中的函数时,才把其装入内存。Function name是需要调用的函数的名称,LabVIEW会把DLL中所有的暴露出来的函数都列出,用户只要在下拉框中选取即可。Thread栏用于设定哪个线程里运行被调用的函数。用户可以通过 CLN 节点的配置面板来指定被调用函数运行所在的线程。CLN 的线程选项非常简单,只有两项: Run in UI thread和Run in any thread。LabVIEW的程序框图上直接可以看出一个 CLN节点是选用的什么线程。如果Run in UI thread,节点颜色是橙色的;Run in any thread则是浅黄色的(图3)。
    <ignore_js_op>

    2.jpg (17.07 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:22 上传

     
    图2 填写被调用函数信息
    <ignore_js_op>

    3.jpg (6.68 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:23 上传

     
    图3 CLN不同线程对比
      通常情况下,除非使用的动态链接库是多线程安全的,CLN 中选择Run in any thread方式;否则必须选择Run in UI thread方式。判断一个动态链接库是不是多线程安全的,需通过以下方法:如果一个动态链接库的文档中没有明确说明它是多线程安全的,那么就要当作是非多线程安全的;在可以看到动态链接库源代码的条件下,如果代码中存在全局变量、静态变量或者代码中看不到有lock一类的操作,那么这个动态链接库也就肯定不是多线程安全的。
      选择了Run in any thread方式,LabVIEW会在最方便的线程内运行动态链接库函数,且一般会与调用它的VI在同一个线程内运行。因为LabVIEW是自动多线程的语言,它也很可能会把动态链接库函数分配给一个单独的线程运行。如果程序中存在没有直接或间接先后关系的两个CLN节点,LabVIEW很可能会同时在不同的线程内运行它们所调用的函数,也许是同一函数。对于非多线程安全的动态链接库,这是很危险的操作。很容易引起数据混乱,甚至是程序崩溃。
      选择Run in UI thread方式,因为LabVIEW只有一个界面线程,所以如果所有的CLN设置都是界面线程,那么就可以保证这些CLN调用的函数肯定全部都运行在同一线程下,肯定不会被同时调用。对于非多线程安全的动态链接库,这种方式就保证了它的安全。
      让我们回到配置对话框第一页,Calling convention用于指明被调用函数的调用约定。这里只支持两种约定:stdcall和C call。它们之间的区别在于,stdcall由被调用者负责清理堆栈,C call由调用者清理堆栈。这个设置错误时,可能会引起LabVIEW崩溃,也就是说如果LabVIEW调用DLL函数时出现异常,首先应该考虑这个设置是否正确。(Windows API一般使用的都是stdcall;标准C的库函数大多使用C call。如果函数声明中有类似__stdcall这样的关键字,它就是stdcall的。)第二页是函数参数的配置(图4)。
    <ignore_js_>

    4.jpg (13.76 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:23 上传

     
    图4 配置函数的参数
      DLL和LabVIEW之间传递参数,最常用的三种数据类型是数值、数值型数组和字符串。C语言中经常把指针或者数据的地址在函数间传递,在32位操作系统中,可以使用int32数值来表示指针。因此,当需要在LabVIEW中传递指针数据时,可以使用I32或U32数值类型来表示这个地址类型的数据。但是,64位的程序中,数据的地址只能使用I64或U64来表示。这样,如果一个调用了DLL函数的VI,并且函数参数中有地址型数据,使用固定数据类型的数值来表示地址,就要准备两份代码。解决方法是使用LabVIEW中的新的数据类型Pointer-sized Integer。这个数据类型的长度在不同的平台上会自动使用32位或64位长度。如果在C语言函数参数声明中有const关键字,可以选中Constant选项。布尔类型在DLL函数和LabVIEW VI之间传递没有专有的数据类型,是利用数值类型来传递的。输入时先把布尔值转变为数值,在传递给DLL函数;输出时再把数值转为布尔值。对于数组的传递,LabVIEW只支持C数据类型中的数值型数组,传递数组类型需要注意的的是“Array Format”要选择“Array Data Pointer”。这个设置中还有其他两个选项,带有“Handle”的参数类型都是表示LabVIEW定义的特殊类型的。在第三方的DLL中不会使用到数组参数作为输出值时,要记得为输出的数组数开辟空间。开辟数据空间的方法有两种:第一种方法,创建一个长度满足要求的数组,作为初始值传递给参数,输出数的数据就会被放置在输入数组的所在的内存空间内。第二种方法是直接在参数配置面板上进行设置。在Minimum size中写入一个固定的数值,LabVIEW就会按此大小为输出的数组开辟空间。在 Minimum size 中选择函数的其它数值参数,而不是固定数值。这样LabVIEW会按照当时被选择的参数值的大小来开辟空间。字符串与使用与数组是非常类似的,实际上在C语言中字符串就是一个I8数组。
           在NI软件的安装路径下打开当前使用版本的LabVIEW文件夹,通过 examples\dll\data passing\Call NativeCode.llb找到简单数据类型在LabVIEW与C之间的对应关系。部分常见关系见表1。
    <ignore_js_op>

    5.jpg (39.05 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:23 上传

     
    <ignore_js_op>

    6.jpg (19.95 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:23 上传

     
    <ignore_js_op>

    7.jpg (33.51 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:23 上传

     
    <ignore_js_op>

    8.jpg (45.04 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:23 上传

     
    表1 数据类型对比
      第三页用于为DLL设置一些回调函数,可以使用这些回调函数在特定的情形下完成初始化、清理资源等工作(图5)。
    <ignore_js_op>

    9.jpg (15.24 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:24 上传

     
    图5 设置回调函数
      如果为Reserve选择了一个回调函数,那么当一个新的线程开始调用这个DLL时,这个回调函数首先被调用。可以利用这个函数为新线程使用到的数据做初始化工作。线程在使用完这个DLL之后,它会去调用Unreserve中指定的回调函数。Abort中指定的函数用于VI非正常结束时被调用,也就是让一个程序在运行完前停止。这些回调函数的原型在Prototype for these procedures中列出,必须要由DLL的开发者按照特定的格式实现。如果使用的DLL不是专为LabVIEW设计的,一般不会包含这样的回调函数。
      第四页是错误处理方式,用户可根据需要选择相应的错误检查级别。
      另外还需要注意的是,C语言中的struct在LabVIEW中可以使用cluster来表示,但有时需要作出相应的调整。这是因为在C语言中,struct的字节对齐是可以进行设置的,这就决定了其各元素的存放地址的可变性。C语言中的对字节对齐数可通过#pragma pack指令或在工程属性中进行指定。而在LabVIEW的cluster中,所有元素只能是1字节对齐的,所以如果要和C语言中非1字节对齐的struct对应,需要做出一些调整。比如,对于C语言中2字节对齐的struct,第一个元素如果是I8型的,在LabVIEW的cluster中第一个元素对应不变,但不能紧挨着放第二个元素,必须留一个无意义的空位。C语言的struct其实也是如此,只不过没有表现出来。所以为了方便,如果自己用C语言生成DLL文件供LabVIEW调用最好将struct都设为1字节对齐。C语言的struct中可以嵌套数组,但是这和LabVIEW中含有数组元素的cluster是不一样的,LabVIEW中需要将数组中的元素都拆开放入cluster中。
      如果C语言的struct中含有一个指针,LabVIEW中的cluster只能用一个U32数值(32位系统上,64位系统上使用U64)来表示指针的地址,而不能将指针所指向的内容放到Cluster中去。如果声明的是指向struct的指针,才能在LabVIEW中使用cluster与之对应。CLN节点的配置面板中,没有一个专门命名的“struct”或者“cluster”参数类型,应选择“Adapt to Type”就可以了。如果参数的类型就是结构而非指针,考虑到C函数参数的压栈顺序,把一个结构体作为参数传给函数,相当于把结构中每个元素分别作为参数传递给函数。图6为C语言中struct和LabVIEW中cluster的部分匹配图。
    <ignore_js_op>

    10.jpg (20.07 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:24 上传

     
    图6 struct和cluster匹配
    LabVIEW打包DLL文件
    我们接下来学习如何使用LabVIEW来打包一个DLL文件。
      首先我们编写一个名为Scale.vi的程序,功能很简单就是对输入的数据乘上10,然后再输出(图7)。
    <ignore_js_op>

    11.jpg (18.08 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:24 上传

     
    图7 scale.vi
      必须在任务管理器中才能生成.dll文件。所以我们首先建立一个project,过程如下:
    点击File>>New Project:
    <ignore_js_op>

    12.jpg (20.14 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:24 上传

     
    图8 生成新项目
      接着弹出是否将该VI添加到新项目的对话框:
    <ignore_js_op>

    13.jpg (13.71 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:24 上传

     
    图9 是否添加VI到新建项目
      选择Add,生成新的项目管理器,将其保存在需要的路径下:
    <ignore_js_op>

    14.jpg (16.51 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:24 上传

     
    图10 项目管理器
      右键单击项目浏览器窗口中的Build Specifications,在快捷菜单中选择New>>Shared Library(DLL),弹出对DLL文件进行设置的对话框。点击Category>>Information,根据自己需求修改Build specification name和Target filename:
    <ignore_js_op>

    15.jpg (16.02 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:25 上传

     
    图11 Information页面
      点击Source Files>>Project Files>> Scale.vi>> ,弹出对话框,直接用默认值,点击OK:
    <ignore_js_op>

    16.jpg (18.16 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:25 上传

     
    图12 Define VI Prototype
      点击Destination>> Scale.dll,点击 ,可选择需要保存的路径。然后再点击Support Directory,这是指明了DLL支持文件的路径(比如数据文件之类的放在哪个文件夹),选择默认即可:
    <ignore_js_op>

    17.jpg (14.52 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:25 上传

     
    图13 Destination页面
      Category中的Source Files可供用户对打包VI的属性和密码做一些设置;Advanced和Additional Exclusions可以做一些高级的设置,这些均按默认值即可。Version Information可让用户填写版本号、名称、版权、公司等信息:
    <ignore_js_op>

    18.jpg (19.1 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:25 上传

     
    图14 Version Information
    点击Run-Time Languages,可对支持语言进行选择,默认即可。点击Preview>>Generate Preview,可以预览到结果:
    <ignore_js_op>

    19.jpg (16.45 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:25 上传

     
    图15 预览生成
    点击Build,弹出生成状态对话框:
    <ignore_js_op>

    20.jpg (13.28 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:25 上传

     
    图16 生成状态框
    点击Done,生成完成,打开DLL文件保存的路径查看:
    <ignore_js_op>

    21.jpg (28 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:26 上传

     
    图17 DLL文件保存路径
    LabVIEW调用DLL文件
      LabVIEW可以方便地调用DLL文件,这些DLL文件可以是其他编译工具,如VC,生成的。
      LabVIEW可以直接通过CLN节点来调用DLL文件,以前面生成的Scale.dll文件为例。现有一个内部定时连续采集程序,通过调用该DLL文件,使读取的值为实际采集值的10倍(图18)。
    <ignore_js_op>

    22.jpg (14.89 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:26 上传

     
    图18 连续采集程序
    方法一
      在程序框图放入Call Library Function Node,双击弹出对话框。在Function页面的Library name or path中给入生成的Scale.dll文件的路径,Function name选择Scale,其他选项默认。
    <ignore_js_op>

    23.jpg (21.43 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:26 上传

     
    图19 Function页面
      由于是LabVIEW生成的DLL文件,在Parameters页面不需要做改动,但是由于VI还有一路输出,所以还需要添加一个参数y,作为DLL文件的输出。
      如果是C语言等非LabVIEW生成的DLL函数,需要将retuen type的type选项和Data type选项改成函数定义的参数类型,对于函数里输入的参数也都需要自行添加。Callbacks和Error Checking则不需要改动。
    <ignore_js_op>

    24.jpg (25.39 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:26 上传

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

    25.jpg (15.98 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:26 上传

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

    26.jpg (33.08 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:27 上传

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

    27.jpg (15.83 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:27 上传

     
    图23 选择DLL文件路径和头文件路径
      点击Next,如果DLL文件中依赖其他的一些DLL文件,需要在Include Paths中填写这些文件的路径。其他选项可以根据客户需求设置,一般默认即可。这样一直点击Next到最后,选择Open the generated library,点击Finish。这样可以生成一个.lvlib格式的库文件,里面包含了Scale.vi,这是将调用该DLL文件的方法封装好的VI,只留下输入和输出接口,方便运用到LabVIEW的程序中。直接将Scale.vi拖放到刚才的连续采集中即可完成方法一的功能。
    <ignore_js_op>

    28.jpg (14.56 KB, 下载次数: 0)

    下载附件  保存到相册

    2015-2-12 11:27 上传

     
    图24 完成的程序
    VC调用LabVIEW生成的DLL文件
      刚才介绍了LabVIEW调用DLL文件的方法,使用VC调用LabVIEW生成的DLL文件也很简单。还是以之前生成Scale 的DLL文件为例,不同的是采集电压程序使用的是C语言的例程,但和LavVIEW实现的功能相同。
      首先将先前生成Scale DLL文件时,路径下所有的文件全部复制粘帖到C语言例程的文件夹下。打开连续采集程序,点击状态栏的Project——Settings,在Project Settings对话框中加载入Scale.lib的静态链接库。
      在程序中键入#include "Scale.h",以便引入该DLL函数。下面是C程序的代码,功能是有限点采集电压,通过Scale.dll文件实现采样值放大10倍的功能。加粗部分是因为调用DLL文件所做的改动。
      1 #include
      2 #include "NIDAQmx.h"
      3 #include "Scale.h"
      4 
      5 #define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else
      6 
      7 
      8 
      9 int main(void)
     10 
     11 {
     12 
     13 int32 error=0;
     14 
     15 TaskHandle taskHandle=0;
     16 
     17 int32 read;
     18 
     19 float64 data[1000];
     20 
     21 char errBuff[2048]={'\0'};
     22 
     23 int i=0;
     24 
     25 double x10=0;
     26 
     27 
     28 
     29 
     30 
     31 /*********************************************/
     32 
     33 // DAQmx Configure Code
     34 
     35 /*********************************************/
     36 
     37 DAQmxErrChk (DAQmxCreateTask("",&taskHandle));
     38 
     39 DAQmxErrChk (DAQmxCreateAIVoltageChan(taskHandle,"Dev1/ai0"/*Config correct device*/,"",DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL));//
     40 
     41 DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,"",10000.0,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,1000));
     42 
     43 
     44 
     45 /*********************************************/
     46 
     47 // DAQmx Start Code
     48 
     49 /*********************************************/
     50 
     51 DAQmxErrChk (DAQmxStartTask(taskHandle));
     52 
     53 
     54 
     55 /*********************************************/
     56 
     57 // DAQmx Read Code
     58 
     59 /*********************************************/
     60 
     61 DAQmxErrChk (DAQmxReadAnalogF64(taskHandle,1000,10.0,DAQmx_Val_GroupByChannel,data,1000,&read,NULL));
     62 
     63 
     64 
     65 printf("Acquired %d points\n",read);
     66 
     67 
     68 
     69 for(i=0;i<1000;i++){
     70 
     71 Scale(data, &x10);
     72 
     73 printf("the %d Value is : %f \n",i,x10);
     74 
     75 
     76 
     77 }
     78 
     79 Error:
     80 
     81 if( DAQmxFailed(error) )
     82 
     83 DAQmxGetExtendedErrorInfo(errBuff,2048);
     84 
     85 if( taskHandle!=0 ) {
     86 
     87 /*********************************************/
     88 
     89 // DAQmx Stop Code
     90 
     91 /*********************************************/
     92 
     93 DAQmxStopTask(taskHandle);
     94 
     95 DAQmxClearTask(taskHandle);
     96 
     97 }
     98 
     99 if( DAQmxFailed(error) )
    100 
    101 printf("DAQmx Error: %s\n",errBuff);
    102 
    103 printf("End of program, press Enter key to quit\n");
    104 
    105 getchar();
    106 
    107 return 0;
    108 
    109 }

    所以,使用LabVIEW不仅可以方便地调用各种编译软件生成的DLL文件,自己也能生成DLL文件供其他编译软件调用。这样,用户在编写大型项目时更加灵活,也为熟悉C语言的工程师提供了巨大的方便。本文只对LabVIEW和VC相互调用DLL文件做了简单的介绍,很多高级功能和技巧,用户可以在实际运用中逐渐掌握。

    转载于:https://www.cnblogs.com/zhengfa-af/p/8329576.html

    展开全文
  • labview调用DLL

    2020-05-26 09:20:12
    <link href="https://csdnimg.cn/public/favicon.ico" rel="SHORTCUT ICON">... <title>LabVIEW如何方便地调用DLL文件_c/c++_weixin_33991418的博客-CSDN博客</title> <meta name="description"...
  • LabVIEW调用第三方采集卡板,必须调用DLL库文件才可以驱动板卡采集数据,该资源内包含其调用的所有例程
  • LabVIEW如何调用VB6生成的ActiveX DLL

    千次阅读 2012-03-06 22:39:57
    LabVIEW如何调用VB6生成的ActiveX DLL 在LabVIEW中调用VB6生成的DLL不能使用调用库函数节点然后指定DLL路径的方法,因为VB6生成的DLL并不是标准的DLL文件。在使用LabVIEW调用在Visual Basic 6.0中生成的ActiveX/...
  • LabView 产生的 DLL ,如何 在 VC 中调用? 谢谢!
  • 第一篇博客当中说了Labview 的优势,其中就有一项就是可以和Matlab和Opencv混合编程,今天就说一下用Labview调用Opencv,当然网上也有人分享出来怎么去做这个动态链接库,但是针对于图像处理的还不多,至少我看到的...
  • 【实例简介】LabV IEW通过Hs ICommun...所需软件2LabVIEW、HslCommunication.dll22. HslCommunication 介绍2HSL是一个基于工业物联网,计算机通讯的架构实现,集成了工业软件开发23. Hs ICommunication下载2HslCommu...
  • LabVIEW调用C++编写的库文件0 前言本来今天不打算更新了,恰好今天有客户有需求需要更新板卡的库文件。这里就顺着这次工作,更新一节使用LabVIEW调用C++写的库文件。有人就想到了,是不是可以用LabVIEW调用我们...
  • Labview如何调用Halcon的一些见解

    千次阅读 2019-04-24 10:31:31
    2.在labview的程序面板中,找到 互通接口----》.NET----》构造器节点 3.之后就是在列表中寻找halcondotnet(版本号) 4.最后,你就可以调用halcon里的函数了 注意:记得装haolocn软件不然搜不出halcon的DLL ....
  • 如何LabVIEW调用动态链接库DLL您好,很高兴为您解答。 要从LabVIEW调用动态链接库(DLL),首先要确定是哪种类型的DLL。 基本上有两种类型的DLL需要考虑:C/C++ DLL 和Microsoft .NET assembly. C/C++ DLL 用C, ...
  • 下面介绍如何LabVIEW中直接调用pico4000a.dll驱动函数,从而实现在LabVIEW中对pico示波器硬件的控制。
  • 在实际项目中,经常会用到第三方提供的DLL(动态链接库),调用别人已经封装好的函数来完成项目任务,但是有时候会碰到一些带指针的参数,如 int * p; int ** dp; 相信对部分人来说,指针还是比较让人头疼的(包括我...
  • Dev c++工具将C代码生成dll文件以及如何调用dll文件

    万次阅读 多人点赞 2017-08-03 17:47:18
    然后我尝试用devc++开发工具来实现这个功能,后来因为DLL生成了,但labview调用的结果和C执行的结果不一致,因此我需要再调用下自己生成的DLL是否正确来定位出错的环节,因此就有了生成DLL以及调用DLL文件。...
  • 在实际项目中,经常会用到第三方提供的DLL(动态链接库),调用别人已经封装好的函数来完成项目任务,但是有时候会碰到一些带指针的参数,如 int * p; int ** dp; 相信对部分人来说,指针还是比较让人头疼的(包括我...
  • 首先请参考官方的文档 ... 但是虽然该文档题目为"Calling a LabVIEW DLL from a LabWindows™/CVI or Other C/C++ project",但是实际上只讲了在VS2008中进行...
  • 如何实现LabVIEW与外部程序间DLL文件的调用
  • 在实际项目中,经常会用到第三方提供的DLL(动态链接库),调用别人已经封装好的函数来完成项目任务,但是有时候会碰到一些带指针的参数,如 int * p; int ** dp; 相信对部分人来说,指针还是比较让人头疼的(包括我...
  • labview如何调用?我们的方法是直接用c#封装dll后提供labview调用。 初始化与反初始化 函数名:lmc1_Initial说明:初始化lmc1控制卡.调用此函数,最终目的是使用库中的函数,来完成相应的操作.语法:int lmc1_...
  • LabVIEW学习笔记(九)——调用外部DLL

    万次阅读 多人点赞 2018-08-25 19:54:23
    前言:  为了在LabVIEW中能够调用其他语言编写的程序,其提供了强大的外部程序接口能力,这些...因此,本章通过示例来学习如何调用外部dll。动态链接库(Dynamic Link Library,DLL)是一个可以多方共享的程序模...
  • 激光打标卡大品牌金橙子广泛用于工业打标领域,其自带c#和c++例程,但是没有labview...labview如何调用?我们的方法是直接用c#封装dll后提供labview调用。初始化与反初始化函数名 :lmc1_Initial说明:初始化lmc1...
  • 激光打标卡大品牌金橙子广泛用于工业打标领域,其自带c#和c++例程,但是没有labview...labview如何调用?我们的方法是直接用c#封装dll后提供labview调用。初始化与反初始化函数名 :lmc1_Initial说明:初始化lmc1...
  • Labview 生成的函数原型如下: #include "extcode.h" #ifdef __cplusplus extern "C" { #endif ...MgErr __cdecl LVDLLStatus(char *errStr, int errStrLen, void *module);...在c#中如何调用???/
  • 如何使用LabVIEW判断计算机的网络连接状态呢?可以调用API来实现这个功能。 在程序框图中放置Call Library Function Node, 双击进行配置: Function选项卡 1.在Library name or path中选择system32中的wininet....
  • 研究了xPC目标的C API接口编程及其API函数以及labview如何调用DLL动态链接库,建立了基于labview的xPC宿主机控制及遥测平台,该平台用于某卫星的姿轨控半物理仿真系统的地面验证,为其提供了功能强大并富于人性化的...

空空如也

空空如也

1 2
收藏数 36
精华内容 14
关键字:

labview如何调用dll