向modem下at command可以,但就是无法获得串口的数据.连OnComm事件都没有,究其是哪里还要设置啊?
modem没有问题,用hyper terminal可以看到数据.mscomm控件是不是有些modem根本不能使用它啊?
代码如下:
BOOL CModemTestDlg::CreateComm()
{
    TCHAR Tport[16];
    TCHAR Rport[16];
    TCHAR Aport[16];   if(m_Tmodem.GetPortOpen()) 
m_Tmodem.SetPortOpen(FALSE);  GetPrivateProfileString("TestModem","SerialPort",NULL,Tport,16,confilename);
    if(strcmp(Tport,"com3")==0)
{
m_Tmodem.SetCommPort(3);
} m_Tmodem. SetInBufferSize(1024); 
m_Tmodem. SetOutBufferSize(512);  if(!m_Tmodem.GetPortOpen()) 
m_Tmodem.SetPortOpen(TRUE);
else 
{
MessageBox("Can't open the test modem com port");
return FALSE;
}

解决方案 »

  1.   

    m_Comm.SetCommPort(1); //选择COM1
    m_Comm.SetInBufferSize(1024); //设置输入缓冲区的大小,Bytes
    m_Comm.SetOutBufferSize(512); //设置输出缓冲区的大小,Bytes if(!m_Comm.GetPortOpen()) //打开串口  
    m_Comm.SetPortOpen(TRUE);
    m_Comm.SetInputMode(1); //设置输入方式为二进制方式
    m_Comm.SetSettings("110,n,8,1"); //设置波特率等参数
    m_Comm.SetRThreshold(1); //为1表示有一个字符引发一个事件    
    m_Comm.SetInputLen(0);你再把你接收部分贴出来看看
      

  2.   

    谢谢.legendhui(秋天的叶子)  
    对不起,刚才贴的有问题,我是这样设置的,这个代码在其它的modem应用时没有问题,只是这个pci modem才出现这个问题.
    代码如下:
    void CModemTestDlg::OnCommMscommT() 
    {
    // TODO: Add your control notification handler code here
    /* VARIANT vResponse;
    int k;
    char *str;
    if(m_Tmodem.GetCommEvent()==2)
    {
    // WaitForSingleObject(WakeUpT,INFINITE);//1000);
    k=m_Tmodem.GetInBufferCount();
    if(k>0)
    {
    vResponse=m_Tmodem.GetInput();
    str=(char*)vResponse.parray->pvData;
    for(int i=0;i<=k;i++)
    { RecTmodem+=str[i];
    m_str[i]=str[i];
    }
    }
    }
    */
    VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;
    // char *str;
    BYTE rxdata[2048]; 
    CString strtemp;
    if(m_Tmodem.GetCommEvent()==2)     
    {
    variant_inp=m_Tmodem.GetInput();  
    safearray_inp=variant_inp;           
    len=safearray_inp.GetOneDimSize(); 
    for(k=0;k<len;k++)
    safearray_inp.GetElement(&k,rxdata+k);
    for(k=0;k<len;k++)            
    {
    BYTE bt=*(char*)(rxdata+k);     
    strtemp.Format("%c",bt);        
    RecTmodem+=strtemp;       
    m_str[k]=rxdata[k];
    }
    m_edit.SetWindowText(RecTmodem);
    // m_edit.SetWindowText("com3 info");
    }
    // m_edit.SetWindowText("com3 event");
    }BOOL CModemTestDlg::CreateComm()
    {
        TCHAR Tport[16];
        TCHAR Rport[16];
        TCHAR Aport[16]; if(m_Tmodem.GetPortOpen()) 
    m_Tmodem.SetPortOpen(FALSE);  GetPrivateProfileString("TestModem","SerialPort",NULL,Tport,16,confilename);
        if(strcmp(Tport,"com3")==0)
    {
    m_Tmodem.SetCommPort(3);
    } m_Tmodem. SetInBufferSize(1024); 
    m_Tmodem. SetOutBufferSize(512);  if(!m_Tmodem.GetPortOpen()) 
    m_Tmodem.SetPortOpen(TRUE);
    else 
    {
    MessageBox("Can't open the test modem com port");
    return FALSE;
    }
    m_Tmodem.SetInputMode(1); 
    m_Tmodem.SetSettings("115200,n,8,1"); 

    m_Tmodem.SetRThreshold(1); 

    m_Tmodem.SetInputLen(0); m_Tmodem.SetRTSEnable(TRUE); // Must be set RTS is true.
        }
      

  3.   

    你看看是不是两种modem的工作频率不同?
    比较一下它们还有什么区别!
      

  4.   

    很奇怪的问题,我的程式在winme下可以,但在winxp/2k下却不可以