我遇到一个问题,我想做用vc 6.0 实现串口通信 就是485通信,可是我使用GreateFille  WirteFile的这几个串口函数都报错,说是这个函数没有定义,可我已经包含了windows.h和stdafx.h  这两个文件,我看到书还有网上没有包含其他文件了,请高手帮帮指点一下,我该怎么办好,着急。

解决方案 »

  1.   

    GreateFille????
    这是你从程序里复制过来的?
    你的拼写让我无语
      

  2.   

    对不起我是打的字,多写了一个字母,我用的就是mfc,不是拼写的问题
    我还是把源代码让大家帮我看看吧
    HANDLE hCom;
    DCB dcb;
    hCom=CreateFile("COM1",
    GENERIC_READ|GENERIC_WRITE,
    0,
    NULL,
    OPEN_EXISTING,
    0,
    NULL);
    if(hCom==(HANDLE)-1)
    {
          
    AfxMessageBox("打开COM1失败");
    // return FALSE;
    }
    //return TRUE;
        dcb BaudRate=9600;
    dcb ByteSize=7;
    dcb Parity=EVENPARITY;
    dcb StopBits=2;
    dcb fBinary=TRUE;
    dcb fParity=TRUE;
        if(SetCommState(hCom,&dcb))
    {
     MessageBox("串口设置出错。");
    }
    SetupComm(hCom,1024,1024);
    PurgeComm(hCom,PURCE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
        
        BOOL WtiteFile(
    HANDLE hFile,
    LPCVOID IpBuffer,
    DWORD nNumberOfBytesToWrite,
    LPDWORD lpNumberofBytesWriten,
            LPOVERLAPPED lpOverlapped);
             BOOL CloseHandle(HANDLE hObject);
    帮我看看,编译就说里面的函数没有定义,可是我已经包含windows.h这个文件了
      

  3.   

    仔细研读下MSDN的帮助文档
    Serial Communications
      

  4.   

    如果你是用MFC创建的工程就不要再包含windows.h了
    这个在stdafx.h/afx.h/afxver_.h/afxv_w32.h里已经包含过了
    另外你还要注意一下你的设备是不是连接到COM1了
      

  5.   

    我弄得就是mfc创建的,可是要是这么说我程序中GreateFile等这些串口函数应该可以拿来就用的,可是为什么报错说没有定义呢?
    设备已经连接到COM11了,调试程序我这有虚拟串口,环境已经搭建好了,这不是问题。
      

  6.   

    GreateFile CreateFile  
    Create File创建文件的意思对于大于9的串口,文件名需要用 _T("\\\\.\\COM11")这样的方式
      

  7.   

    GreateFile CreateFile  
    Create File创建文件的意思对于大于9的串口,文件名需要用 _T("\\\\.\\COM11")这样的方式
      

  8.   

    GreateFile CreateFile     这个函数 微软的msdn就是这是这么说的
    Create File创建文件的意思    这个函数我没见过,不过我试了,还是不行
    请大家帮忙想想,我急用。谢了
      

  9.   

    你的工程是不是UNICODE,如果,就改成多字节试试.VS2003以上版本默认字符集是UNICODE.如果改成多字节不不行,你就生成一个对话框工程,加上CreateFile这个函数试试
      

  10.   

    大家再帮我看看
      char lpBuf[]="Hello World!";
    HANDLE hFile;
    DCB dcb;
    hFile=CreateFile("COM1",
    GENERIC_READ|GENERIC_WRITE,
    0,
    NULL,
    OPEN_EXISTING,
    0,
    NULL);
    if(hFile==(HANDLE)-1)
    {
          
    AfxMessageBox("打开COM1失败");
    // return FALSE;
    }
    //return TRUE;
         FillMemory(&dcb,sizeof(dcb),0);
    dcb.DCBlength=sizeof(dcb);
    if(!BuildCommDCB("9600,n,8,1",&dcb)){
    return ;
         
        }
    else
     /*  dcb BaudRate=9600;
    dcb ByteSize=7;
    dcb Parity=EVENPARITY;
    dcb StopBits=2;
    dcb fBinary=TRUE;
    dcb fParity=TRUE;
        if(SetCommState(hCom,&dcb))
    {
     MessageBox("串口设置出错。");
    }
    SetupComm(hCom,1024,1024);
    PurgeComm(hCom,PURCE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
        
    */     WriteFile(hFile,lpBuf,strlen(lpBuf),NULL,NULL);
     CloseHandle(hFile);
    这段程序已经调通,但是
    我发的波涛9600,N,8,1
    可是串口显示1200,E,7,1
    大家看看这是怎么回事?先谢了
      

  11.   

    以下是两段设置波涛率等参数的语句,大家帮我看看怎么回事第一种方法报错为:error C2664: 'GetCommState' : cannot convert parameter 2 from 'struct _DCB' to 'struct _DCB *'
            No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    第二种方法没报错,可是也没起作用。这是怎么回事?
    GetCommState(hFile,dcb);
      dcb.BaudRate=CBR_9600;
    //dcb.fParity=N;
    dcb.ByteSize=8;
    dcb.StopBits=1;
      GetCommState(hFile,dcb);
    // PurgeComm(hFile,PURGE_TXCLEAR);
     */     FillMemory(&dcb,sizeof(dcb),0);
     dcb.DCBlength=sizeof(dcb);
     if(!BuildCommDCB("9600,n,8,1",&dcb))
     { 
     return ;  }