VC++动态链接库编程之通信控制DLL
2010-10-03 00:06
204 查看
我们在这里举一个串口通信类的例子。
也许您需要了解一点串口通信的背景知识,其实串口到处都看得到,譬如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的什么特性使得它能够成为一种病毒?下一节我们将揭晓谜底。
也许您需要了解一点串口通信的背景知识,其实串口到处都看得到,譬如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的什么特性使得它能够成为一种病毒?下一节我们将揭晓谜底。
相关文章推荐
- VC++动态链接库(DLL)编程深入浅出
- VC++动态链接库编程之非MFC DLL
- VC++动态链接库(DLL)编程深入浅出:Q&A(原创)
- VC++动态链接库(DLL)编程深入浅出之二(3)
- VC++动态链接库编程之MFC DLL
- VC++动态链接库编程之MFC扩展 DLL
- VC++动态链接库(DLL)编程深入浅出(二)
- VC++动态链接库(DLL)编程深入浅出(zz)
- VC++动态链接库编程之MFC DLL
- 【vc】VC++动态链接库(DLL)编程深入浅出(一)
- VC++动态链接库((DLL)编程深入浅出(一)
- VC++动态链接库(DLL)编程深入浅出
- VC++动态链接库(DLL)编程深入浅出(一)
- VC++动态链接库编程之MFC扩展 DLL
- VC++动态链接库(DLL)编程深入浅出(zz)
- VC++动态链接库编程之非MFC DLL
- VC++动态链接库编程之MFC规则DLL
- VC++动态链接库(DLL)编程深入浅出(zz)
- VC++动态链接库(DLL)编程深入浅出(转帖:基础班)
- VC++动态链接库(DLL)编程深入浅出之三(1)——MFCdll