原创 LabVIEW中如何调用API

2008-5-23 17:09 2976 8 8 分类: 测试测量

LabVIEW中如何调用API


     LabVIEW 没有提供这样的功能, 必须呼叫 Windows API」, 有时候笔者常看到有些朋友会问许多问题,实在是因为LabVIEW本身不提供这些功能,或者实现很困难,所以才会这样回答。 虽然这样回答有点偷懒, 或者说不负责任, 但这的确是事实, LabVIEW 所提供的模块,虽然也不在少数, 但是主要用于测控软件开发,要想变点花样,通常是行不通的,这是笔者决定开始撰写本文的主要原因。 


    感觉上 LabVIEW 程式要呼叫 Windows API是一件比较困难的事情,或者说比较麻烦的事情,但别忘了 Windows API是大家的,凡是在 Windows工作环境底下执行的应用程式,都有权利呼叫 Windows API。其实LabVIEW和Visual C++/Visual Basic/Delphi等开发软件一样,可以呼叫API,而且实现比较方便,与调用其他动态连接库文件(.DLL)几乎一样。


    (笔者个人认为要做到将API函数灵活调用到LV,最好有VC/VB编程基础。我觉得如果花一两个月学习VB,对与LV的提高会起到意想不到的效果。VB和LabVIEW都是电子工程师喜欢用于开发测试软件的工具,其中有许多相似之处。它们具有入门简单,方便地调用/移植其他代码。VB调用API的参考资料很多,但介绍如何在LV中调用API的资料却为数不多。本人写这篇文章,虽然错误难免,但还是希望对大家有所帮助。)
    1、Windows API简介: 


1.1 简介:


Windows 作为多线程rogramming Interface, 简称 API 函数。 


1.2 但 Windows API 与 C 语言最亲近 


虽然说呼叫 Windows API(以下简称 API 或 API 函数) 是每一个应用程式的权利, 但不可否认的 API 却与 C 语言最亲近, 因为 API 函数在参数的传递上就是以 C 语言为标准。


但这并不表示 LV 程式不能呼叫含有参数的 API 函数, 如果传递的参数是单纯的资料型别, 例如「整数」, 则 LV 与 C 语言还是相通的, 如果是特殊的资料型别(包含「字串」),则必须遵循一定的规范, 否则不是无法得到正确的结果, 就是因为违反规定而被踢出系统。


2、使用 Windows API 的难处  
当我们要开始使用 API 时, 必须知道叁件事情:(1) 要呼叫哪一个 API 函数;(2) 如何在LV中调用 API 函数;(3) 如何传递参数。 


2.1 要呼叫哪一个 API 函数 


    这是以上叁件事情当中最困难的一件, 主要的原因是 Windows 的 API 实在太多了, 大约有 1500 个, 这还不包含 OLE、ODBC…等特殊的 API, 此外, 如果我们把 API 按不同性质加以分类,则使用每一类 API 函数所应具备的背景知识亦各有不同, 以系统注册区相关的 API 函数为例, 就必须先了解 Windows 如何安排系统注册区, 以及存取系统注册区的方式。 


   不过也不必被 1500++ 个函数给打退堂鼓了, 因为不是所有的程式设计都要仰赖 API, 当我们面对一个问题时, 首先还是寻求 LV 的解决方案,如果 LV 实在无法解决,才考虑使用 API,例如LV6.0以前对注册表操作需要调用API,但现在新的版本有专门的模块(但实质上与调用API一样,只是操作起来方便了)。


   要想了解哪些是常用API,它们的功能,所属的动态连接库,可以查看一些手册,也可以查看一些VB中应用的例子(笔者就是从VB的代码中熟悉了一些API,然后知道如何在LV中调用它们)。

2.2 如何在LV中调用 API 函数。 



   在LV中点击开大图


使用Browse到Windows(或WinNT)下面的system32中先选择API的库函数,如User32.dll,然后在FuncName的下拉式菜单中选择你需要的函数,在Calling Convention中选择”stdcall(WINAPI).下面的工作是设置传递参数.



2.3 如何传递参数


LV的参数类型中提供了几种在LV中常用的类型:


Numeric(数值):整数(8-,16-,and 32-bit signed and unsigned integers),单精度(Single-precision)和双精度(double-precision);


Array(数组):实现数组类型传递;


String(字符串): 实现字符串数据传递;


ActiveX: 处理ActiveX数据;


Waveform/Digital Waveform/ Digital Table:主要为LV数据传递的类型,一般API涉及不多。


Adapt to Type:适合自定型参数。


    由于 API 采用了 C 语言的参数传递方式, 而 C 语言的参数传递又与 LV有着不小的差异, 以致不少呼叫 API 所造成的错误都发生在参数传递时, 而本期我们并不想花太多的篇幅放在如何传递参数上面,以后有机会将放在如何调用dll方面的文章中作详细讲解。下面举些例子,来说明如何调用API,我想让大家明白在LV中调用API其实不难。希望对大家入门有帮助。


3. LV调用 API 示例:
(注:由于在VC/VB中调用API函数的参数设置对LV中调用API有帮助,特地将起代码一并附上,以供参考)
3.1 LV获得硬盘的可用空间(点击开大图


检测硬盘剩余空间程序和控制面板如下图:


点击开大图


3.2 LV中获的OINTAPI) As Long
Type OINTAPI ' POINTAPI 为一自定型别
x As Long
y As Long
End Type



3.3 LV中获得磁盘类别(其他略去,代码见附件Get Disk Type.vi )


3.4 LV中开关光驱功能(其他略去,代码见附件CDDoor Tools.vi )
(to be continued)
4. 了解更多API 函数:


了解和查阅API 函数的功能和参数设置,主要途径有:a)查阅介绍Windows API的图书; b)查阅微软MSDN Library有VC定义的原型; c)一些编程网站的在线查询; d)通过学习VB中如何调用了解API 函数的例子。


附:如何在VB中宣告API 函数


了解API 函数的宣告并不困难, 因为我们可以请 VB 的「API 检视员」来帮忙, 以下是使用「API 检视员」的方法: 


1. 首先选取 VB 功能表的「增益集/增益功能管理员」,然後在「增益功能管理员」交谈窗中核取「VB API Viewer」, 按下「确定」钮後, VB 的「增益集」功能表栏底下就会出现「API 检视员」, 选取此一命令,即可启动「API 检视员」。 


2. 第一次执行 API 检视员时,须利用功能表的「档案/载入文字档」载入 VB Winapi 目录底下的 Win32api.txt, 接着在「可选项的项目」底下即会列出所有的 API 函数, 若我们双按其中的函数,则该函数的宣告即会出现在「选取的项目」底下, 此时再按下「复制」钮, 可将选取的函数宣告复制到剪贴簿, 过程如图-2, 接着回到 VB 的程式视窗, 再选取功能表的「编辑/复制」,即可将函数的宣告从剪贴簿中复制过来。


图中利用「API 检视员」将 API 的宣告复制到剪贴簿接下来请注意 API 宣告式复制到 VB 程式的位置, 此时您有两种选择:(1) 先利用 VB 功能表的「专案/新增模组」新增一个一般模组(.bas 档), 然後将 API 宣告式复制到此一模组的程式视窗中, (2) 将 API 宣告式复制到表单程式视窗的 "(一般)" 区块底下, 但复制过来之後, 必须在 Declare 前面加上 Private 保留字。
稍后放出原代码~~~~~~~~~~:)

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /2 下一条