本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[MSVC] MFCを使用した簡単な通信プログラム

文書番号: 402027

最終更新日: 2004/04/27


この資料は以下の製品について記述したものです。


概要

この資料は、MFC を使用した簡単な通信プログラム (Microsoft Windows 3.1 用) を 紹介したものです。

詳細

以下の手順で作成出来ます。
  1. AppWizard で SDI のアプリケーションを作成する
  2. View を CView の派生から CEditView からの派生に変える。( Visual C++ 1.5 では AppWizard で始めから選択できます。)
  3. メッセージマップに MFC テクニカルノート 6 に従い WM_COMMNOTIFY を 受けるメンバー関数を登録します。
      //  メッセージマップへの登録
      BEGIN_MESSAGE_MAP(CComcomView, CEditView)
           :
          ON_MESSAGE(WM_COMMNOTIFY,OnCommMessage)
           :
      END_MESSAGE_MAP()
      // WM_COMMNOTIFY 時の処理
      afx_msg LRESULT CComcomView::OnCommMessage(WPARAM wParam, LPARAM lParam)
      {
          unsigned int i;
          char buff[256];
          COMSTAT FAR lpStat;
          GetCommError(idComDev, &lpStat);  // 受信文字数の取得
          ReadComm(idComDev,(char far *)buff,lpStat.cbInQue ); // 読み込み
          for (i = 0 ; i < lpStat.cbInQue ; i++ )
          {
              PostMessage(WM_CHAR,buff[i],0L);  // View への書き込み
          }
          GetCommEventMask(idComDev, EV_RXCHAR); // イベントのリセット
          return 0;
      }
    
ClassWizard で通信の初期化、終了、送信用のメンバー関数を以下のように 作成します。
  int CComcomView::OnCreate(LPCREATESTRUCT lpCreateStruct)
  {
      int err;
      if (CEditView::OnCreate(lpCreateStruct) == -1)
          return -1;
      idComDev = OpenComm("COM1", 1024, 128); // 回線のオープン
      if (idComDev < 0)
      {
          AfxMessageBox("OpenComm Error");
          return 0;
      }
      err = BuildCommDCB("COM1:9600, n, 8, 1", &dcb); // 回線情報の取得
      if (err < 0)
      {
          AfxMessageBox("BuildCommDCB Error");
          return 0;
      }
      err = SetCommState(&dcb);                        // 回線情報のセット
      if (err < 0)
      {
          AfxMessageBox("SetCommState Error");
          return 0;
      }
      SetCommEventMask(idComDev,EV_RXCHAR);           // イベントのセット
      if(0 == EnableCommNotification(idComDev,m_hWnd,-1,-1))// 通信割込みの開始
      {
          AfxMessageBox("EnableCommNotification Error");
          return 0;
      }
      return 0;
  }
  void CComcomView::OnClose() // 回線終了処理
  {
      CloseComm(idComDev);
      CEditView::OnClose();
  }
  void CComcomView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) // 受信処理
  {
      WriteComm(idComDev,(char far *)&nChar,1);
      CEditView::OnChar(nChar, nRepCnt, nFlags);
  }

詳細

  • Visual C++ は、米国 Microsoft Corporation の商標です。

Keywords: KBHOWTO VC10 VC15 KB402027
Technology: kbAudDeveloper kbvc150 kbVCsearch

inserted by FC2 system