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

2015-09-15 10:08:59来源: eefocus
问题: 如何从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 NodeLabVIEW中的函数手动调用该函数。
  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:
  1. 为了在LabVIEW中使用.NET assembly , 简单地使用.NET 面板 (Connectivity».NET) 找出所有可用的函数.
  2. 首先使用结构节点来例示.NET assembly中的一个类.
  3. 通过简单地连接结构节点的类引用到属性节点或者调用节点,使用属性节点和调用节点来获取该类的属性和方法

实例:

首先编程环境是常见的VC6.0(与其相关的MSDN并不多,下载连接可以学到更多的东西,这个是英文版的)

新建项目 “Win32Dynamic-Link Library”项目名称“Dll_1”,确定后选择“一个简单的DLL工程”点击“完成”。

其中下面是生成的Dll_1.cpp的代码:

// Dll_1.cpp : Defines the entry point for the DLLapplication.

//

 

#include "stdafx.h"

 

BOOL APIENTRY DllMain( HANDLE hModule,

                      DWORD ul_reason_for_call,

                      LPVOID lpReserved

                    )

{

   return TRUE;

}

 

下面讲编辑“Dll_1.cpp”

在#include "stdafx.h"的下一行加入

extern "C" __declspec(dllexport) int fun(int a, int b);

其中int fun(int a, int b)这部分代码是我们想用dll实现的函数原型声明

 如果还想加入其他的可以继续加入extern"C" __declspec(dllexport) int fun1(int a, int b);

 

下面是DLL的默认入口函数,类似于C语言的main函数

BOOL APIENTRY DllMain( HANDLE hModule,

                      DWORD ul_reason_for_call,

                      LPVOID lpReserved

                    )

{

   return TRUE;

}

该例子无需修改此处,在这些代码后面加入:

int fun(int a,int b)

{

   return a+b;

}

这就是我们想用DLL实现的函数定义。

build之后就会在debug目录下生成我们想要的Dll1.dll

本人使用LabView8.2来调用自己编写的DLL,其中DLL是上篇文章编写的。

首先新建一个VI,Ctrl+E切换到后面板,选择“互联接口-〉库与可执行程序-〉调用库函数”

在后面板空白处单击,

双击后修改设置:

选择“函数”面板,在路径中选择DLL的相应位置,函数名是“fun”,线程是“在VI线程中运行”,调用规范是“C”

然后选择参数面板

右侧函数名是返回类型,类型是数值,数据类型是有符号32位整型

然后添加2个参数

(因为我的计算机是32位,int型是32位的整型,此处的设置根据不同的计算机而定)

这时候点击确定,退出设置界面

点击运行OK了!

关键字:LabVIEW中  动态链接库  DLL

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/Test_and_measurement/2015/0915/article_13119.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
LabVIEW中
动态链接库
DLL

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved