基于VB平台的游戏控制器端口数据通信李密吕钊(空军第一航空学院电子工程系464000)[摘要]本文详细分析了API函数调用的基本方法,在此基础上介绍了如何实现游戏控制器端口的数据通讯。[关键词]API,窗体,工程TOACHIEVECOMMUNICATIONSOFTHEGAMECONTROLLERBASEDONVBLV-ZHAOLI-MI(ThefirstAeronauticalCollegeofAir-Force.464000Xinyang,HenanProvince)[Abstract]ThisarticleintroducesthewaythathowtoapplyAPIfunction,andanalyzestheprocessofachievingcommunicationsofthegamecontrollerbasedonVB.[keywords]API,Form,ProjectorVisualBasic是Microsoft推出的功能强大的集成式开发环境。它以其易学易用深受广大电脑爱好者的喜爱。在使用VB编程过程中,我们经常需要调用WindowsAPI函数来实现一些特殊的功能。WindowsAPI是Windows中可供任何Windows应用访问的函数的集合,它包含了成千上万的函数、例程、类型和常数定义,可以定义为三个主要的动态链接库和几个较小的DLL。VisualBasic本身便是600多个WindowsAPI函数轴取到高层的结果,而Windows提供的所有功能几乎都可以在API函数中找到。准确地调用API函数便是VB编程的精髓所在。在利用VB进行精确图像处理,尤其是在编写仿真、模拟应用软件时,合理正确地调用API以实现对外设接口的数据通信则显得尤为重要。笔者在利用VB开发某飞机综合训练模拟器过程中,经过反复调试,实现了通过调用API函数来即时读取游戏控制器的端口数据,并由此控制飞行姿态,以达到利用游戏控制器来模拟飞机操纵杆的目的。经调试,总结出用以完成精确读取游戏控制器端口数据的方法。一、API函数的调用要调用API函数,就需要一种特别的声明,这种声明比一般变量声明要复杂,它们被称为Declare语句。Declare语句一般具有两种可能的形式。对于DLL中的子程序(没有返回值),使用如下Declare语句:[Public/Private]DeclareSubnameLib“libname”[Alias_aliasname][(areglist)]而对函数(有返回值),则使用如下语句:[Public/Private]DeclareFunctionnameLib“libname”[Alias_aliasname][AsType]其中Lib参数只是用于标识——它用于通知VisualBasic要调用的一个DLL,libname参数是包含的将调用过程的DLL名称,Alias关键字在需要使用与DLL中不同名称的过程时使用。一个非常重要的问题是API函数的Declare语句必须是Windows所要求的形式,如果省略了ByVal关键字,一般会使系统发生死锁。VisualBasic专业版和企业版的一个很好的特性就是它们提供了一个WindowsAPI函数所需要的所有Declare语句及常量的文件——以及一个处理这个文件的APIViewer程序。可以由VisualBasic项目组或直接从VB目录下的Winapi子目录或通过使用Add_InManager(程序名称为Aplioad.exe)使其成为内部程序的方式进入API函数信息并将拷贝内容粘到应用程序中。调用API函数具体步骤如下:1、打开APIViewer的File菜单,选择需要查看的文件。如果第一次装载Win32api.txt时,APIViewer会提问是否要将文本文件转换为数据库文件,这样可以使速度有所提高。(见图1所示)2、在装载了文本文件后,键入要查找的项的首字母,从APIType列表框中选择需要查看的API部分(Delcares、常量等等)。3、从AvailableItems列表框中选择所需的项。4、点击Copy按钮可以将选择的项放到剪切板中。(见图2所示)5、移动代码窗中要将所选内容插入的位置,选择Edit/Paste(或Ctrl+V)以将相应的内容从剪切板拷贝下来。这里需要指出,为了慎重地使用API函数,必须建立所需文档以说明使用了哪些API函数。二、工程的建立首先新建一个工程,保存为“control.vbp”,窗体命名为“control.frx”,向窗体中添加两个Line控件,两个Timer控件与一个Label控件,并按下表设定它们的属性值:对象名称属性属性值对象名称属性属性值图1图2Form1BackColor&H00000000&Line1BorderColor&H0000FFFF&Height4695BorderWidth2Width3495X11920Timer1EnableTureX22880Interval100Y12340Timer2EnableTureY22340Interval100Line2BorderColor&H0000FFFF&Label1AutosizeTureBorderWidth2Backstyle0-TransparentX1300Caption基于VB平台上的游戏控制器通信X21320...