| |
VC++动态链接库编程之DLL典型实例 |
|
时间: 2005-10-11 来自:天极网 |
 |
|
7.3通信控制DLL
我们在这里举一个串口通信类的例子。
也许您需要了解一点串口通信的背景知识,其实串口到处都看得到,譬如PC机的COM口即为串行通讯口(简称串口)。如图20,打开Windows的设备管理器,我们看到了COM口。
在Windows系统,需通过DCB(Device Control Block)对串口进行配置。利用Windows API GetCommState函数可以获取串口当前配置;利用SetCommState函数则可以设置串口通讯的参数。
串行通信通常按以下四步进行:
(1)打开串口;
(2)配置串口;
(3)数据传送;
(4)关闭串口。
 图20 PC的串口 | 由此可见,我们需要给串口控制DLL提供如下四个接口函数:
//打开指定的串口,其参数port为端口号
BOOL ComOpen(int port); //在这个函数里使用默认的参数设置串口
//将打开的串口关闭
void ComClose(int port);
//将串口接收缓冲区中的数据放到buffer中
int GetComData(char *buf, int buf_len);
//将指定长度的数据发送到串口
int SendDataToCom(LPBYTE buf,int buf_Len); | 下面给出了DLL接口的主要源代码框架:
//com.h:com类通信接口
class AFX_EXT_CLASS com { public: ComOpen(int port) { … } int SendDataToCom(LPBYTE buf,int buf_Len) { … } int GetComData(char *buf, int buf_len) { … } void ComClose() { … } } | 我们编写一控制台程序来演示DLL的调用:
#include <iostream> #include <exception>
using namespace std;
#include <windows.h> #include "com.h" //包含DLL中导出类的头文件 int main(int argc, char *argv[]) { try { char str[] = "com_class test"; com com1; com1.ComOpen (1); for(int i=0; i<100; i++) //以同步方式写com的buffer { Sleep(500); com1.SendDataToCom (str,strlen(str)); } com1.ComClose (); } catch(exception &e) { cout << e.what() << endl; } return 0; } | DLL的编写与调用方法及主要应用皆已讲完,在下一节里,我们将看到比较“高深”的主题――DLL木马。曾几何时,DLL木马成为了病毒的一种十分重要的形式,是DLL的什么特性使得它能够成为一种病毒?下一节我们将揭晓谜底。
|
|
|
|
|
|
|
|