vc++-VC++串口编程求助。。。。。

问题描述

VC++串口编程求助。。。。。

非常著名的serialport类中有这么一段代码:
bResult = WaitCommEvent(port->m_hComm, &Event, &port->m_ov);

    if (!bResult)
    {
        // If WaitCommEvent() returns FALSE, process the last error to determin
        switch (dwError = GetLastError())
        {
        case ERROR_IO_PENDING:
            {
                break;
            }
        case 87:
            {
                break;
            }
        default:
            {
                port->ProcessErrorMessage("WaitCommEvent()");
                break;
            }
        }
    }
    else
    {

        bResult = ClearCommError(port->m_hComm, &dwError, &comstat);

        if (comstat.cbInQue == 0)
            continue;
    }    // end if bResult

        //m_hEventArray[0] = m_hShutdownEvent;    // highest priority
        //m_hEventArray[1] = m_ov.hEvent;
        //m_hEventArray[2] = m_hWriteEvent;
    Event = WaitForMultipleObjects(3, port->m_hEventArray, FALSE, INFINITE);

    switch (Event)
    {
    case 0:
        {
            // Shutdown event.  This is event zero so it will be// the higest priority and be serviced first.
            CloseHandle(port->m_hComm);
            port->m_hComm=NULL;
            port->m_bThreadAlive = FALSE;
            // Kill this thread.  break is not needed, but makes me feel better.
            AfxEndThread(100);

            break;
        }
    case 1:    // read event
        {
            GetCommMask(port->m_hComm, &CommEvent);
            if (CommEvent & EV_RXCHAR)
                // Receive character event from port.
                ReceiveChar(port, comstat);
            if (CommEvent & EV_CTS)
                ::SendMessage(port->m_pOwner->m_hWnd, WM_COMM_CTS_DETECTED, (WPARAM) 0, (LPARAM) port->m_nPortNr);
            if (CommEvent & EV_BREAK)
                ::SendMessage(port->m_pOwner->m_hWnd, WM_COMM_BREAK_DETECTED, (WPARAM) 0, (LPARAM) port->m_nPortNr);
            if (CommEvent & EV_ERR)
                ::SendMessage(port->m_pOwner->m_hWnd, WM_COMM_ERR_DETECTED, (WPARAM) 0, (LPARAM) port->m_nPortNr);
            if (CommEvent & EV_RING)
                ::SendMessage(port->m_pOwner->m_hWnd, WM_COMM_RING_DETECTED, (WPARAM) 0, (LPARAM) port->m_nPortNr);

            if (CommEvent & EV_RXFLAG)
                ::SendMessage(port->m_pOwner->m_hWnd, WM_COMM_RXFLAG_DETECTED, (WPARAM) 0, (LPARAM) port->m_nPortNr);

            break;
        }
    case 2: // write event
        {
            // Write character event from port
            WriteChar(port);
            break;
        }

    } // end switch

} // close forever loop
    小弟不太明白overlapped中的hEvent的置位和复位时如何实现的呢?是人工置位复位还是自动置位复位呢 求指教

解决方案

用vc++编写上位机:
?
一是利用Windows API通信函数;二是利用VC的标准通信
函数inp、inpw、inpd、outp、outpw、outpd等直接对串口进行操作;三是使用Microsoft Visual C++的通信控件(MSComm);
四是利用第三方编写的通信类。以上几种方法中第一种使用面较广,但由于比较复杂,专业化程度较高,使用较困难;第二种需要了
......
答案就在这里:vc++ 串口编程

时间: 2024-11-17 05:59:24

vc++-VC++串口编程求助。。。。。的相关文章

深入浅出VC++串口编程之短信应用开发

前面数次连载我们以较长的篇幅讲解了串口通信的硬件原理.DOS平台控制以及基于WIN32 API.控件和第三方类的串口编程.作为本系列文章的最后一次连载,本章将给出一个典型的 应用实例:西门子短信服务模块TC35的串口控制. 1.短信控制终端 作为短信 (Short Message Service,SMS)一族,想必你有这样的体会:用手机编辑短信息十分不便. 容易出错,而且修改费时,若能用计算机来收发短信则方便许多.注意,本文所说的用计算 机收发短信并不是说通过"网易短信王"等方式在In

深入浅出VC++串口编程之第三方类

串口类 从本系列文章可以看出,与通过WIN32 API进行串口访问相比,通过MScomm这个Activex控 件进行串口访问要来的方便许多,它基本上可以向用户屏蔽多线程的细节,以事件(发出 OnComm消息)方式实现串口的异步访问. 尽管如此,MScomm控件的使用仍有诸多不便,譬如其发送和接收数据都要进行VARIANT类 型对象与字符串的转化等.因此,国内外许多优秀的程序员自己编写了一些串口类,使用这 些类,我们将可以更方便的操作串口.在笔者的<深入浅出Win32多线程程序设计之综合实例 >

c++-VC++与VC#的windows编程有区别吗??使用的类库一样吗??

问题描述 VC++与VC#的windows编程有区别吗??使用的类库一样吗?? VC++与VC#的windows编程有区别吗??使用的类库一样吗?? 比如这个里面的一些框架函数如Button等的使用相同吗? 解决方案 微软为C++做了一些扩展,搞出一种向下兼容C++,但是又有自己的语法以兼容.net的语言,叫C++/CLI(以前叫C++ ME,托管扩展) VC++/CLI可以同时支持MFC和.NET.但是事实上几乎没有人用,是很冷僻的技术. 相比较MFC,WinForms和WPF要好太多,C#也

vc++图像-VC++中图形编程一些函数定义问题

问题描述 VC++中图形编程一些函数定义问题 有没有知道下列几个函数的函数定义即函数体的?获取窗口显存指针函数GetImageBufferCOLORREF BGR(COLORREF color);(显存操作绘制烟花)SetWorkingImage( &fm );(储存烟花的像素点颜色)loadimage( &fm./fire/flower.jpg"" 3120 240 );(储存烟花的像素点颜色)

c语言 编程-DirectX 9.0 Summer 2004 SDK和VC++6.0编程时总是出现问题,怎么办???

问题描述 DirectX 9.0 Summer 2004 SDK和VC++6.0编程时总是出现问题,怎么办??? #define DIRECTINPUT_VERSION 0x0800 //声明DirectX Input的版本是8.0 #ifndef _WIN32_DCOM #define _WIN32_DCOM #endif #define pr printf #pragma once #define INITGUID //确保INITGUID已被定义 #define INTERFACE IDi

学习笔记:Java串口编程(短信Modem).

最终目标:在Linux下提供一个稳定可靠的Java短信发送服务器. 第一阶段:在Win32平台下编码并测试: 第二阶段:在Linux平台下部署并测试: 目录: 相关资源:(Java Communication包) Win32串口编程前期准备 Win32短信Modem的测试步骤和AT指令: Linux串口编程前期准备 列出系统所有串口.并口,来找到短信Modem所使用的串口名字 测试串口速率 Win32/Linux下串口编程的差异 Win32/Linux下串口编程(屏蔽平台差异) Win32/Li

串口api-QT串口编程,如何获取电脑当前可用端口名。

问题描述 QT串口编程,如何获取电脑当前可用端口名. 在QT串口编程中,我使用的是第三方类qextserialport,里面好像没有获取端口名的函数,我想把可用的端口名放在下拉框里,手动设置不合理啊.求指导. 解决方案 调用windows API,查询注册表获取当前可用的端口,已解决.

c++-C++编程求助,如题,反距离加权插值

问题描述 C++编程求助,如题,反距离加权插值 在内存中生成一个400*400的矩阵(方式不限,坐标轴方向不限,存储顺序不限,但同一作业要保持统一),每个格子(正方形)的边长为1km*1km:同时,根据矩阵的坐标随机生成200个点作为雨量站点,并随机生成一个时次的降水量:根据反距离平方插值法,计算该时次400*400点上的雨量值:将结果格式化输出到名称为rainfall.txt文件中 解决方案 http://download.csdn.net/detail/zhang8152560/765774

linux下串口编程read函数返回(非超时返回)问题

问题描述 linux下串口编程read函数返回(非超时返回)问题 串口编程经典应用场景:打开串口,阻塞模式,非超时返回,有数据返回,无数据死等. 简易代码为例: void* read_thread(void* param) { char szbuf[128]; int size = 0; while (running) { size = read(fd, szbuf, sizeof(szbuf)); } return 0; } int main() { fd = open(port, O_RDW