Serial Communications with ActiveX | CodeGuru

Serial Communications with ActiveX

Introduction In this article, we show a simple example to send and receive data through the serial port. In what concerns data reception, we use an event driven mechanism. An event is generated and transmitted to our program when a character arrives on the serial port. The MSComm control uses the OnComm event to trap […]

Written By
CodeGuru Staff
CodeGuru Staff
Jun 7, 2004
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Introduction

In this article, we show a simple example to send and receive data through the serial port. In what concerns data reception, we use an event driven mechanism. An event is generated and transmitted to our program when a character arrives on the serial port. The MSComm control uses the OnComm event to trap and handle communications events. We check the event type; if it is a “receive event,” we retrieve data from the serial input buffer and display it in a text box.

Example

Follow these steps to make a sample of serial communication under Visual C++:

  1. Select a “new” project from the “File” menu. Name the project “Serial“.
  2. Under the “Projects” tab, select “MFC App Wizard” and click “OK“.
  3. In the first step, select “Single Document” instead of “Multiple Documents“.
  4. In the second step, click “Next“.
  5. In the third step, make sure that “ActiveX Controls” is checked.
  6. In the fourth and fifth steps, click “Next“.
  7. In the sixth step, change the base class of “CserrView” to “CFormView“.
  8. Select “IDD_Serial_Form” under “Dialog” on the “Resources View” tab. Create two EditBoxes: one for sending data and the other for viewing received data. Make one button to confirm a send of data; change its caption to “Send“.
  9. Next, you must add the ActiveX control. Go to the “Project” menu and select “Add To Project“; then select “Components And Controls“. Next, find the “Microsoft Communications Control, version 6.0” in “Registered ActiveX Controls” and click the “Insert” button; then click “OK“. At the end, click the “Close” button.
  10. Now, you must associate several variables for each control. Select “Class Wizard” in the “View” menu. On the “Member Variables” tab, you see all the controls IDs you have placed on the form. For each control, associate one variable by selecting the control and clicking “Add variable“.
  11. With the “class Wizard“, you must add two messages: one for the “send” button and the other for the MSComm event “OnComm“. To do this, select the MSComm object ID. On the right, you see “OnComm” messages. Click to “Add Function”, and repeat this step for “IDC_Button1“.
Advertisement

Com Initialization

Before you send or receive data on the serial port, you should initialize it. You can make that in the code or directly by clicking the right button on the MSComm Control and selecting “Properties MSComm Object”.

For more information about InputLen, InputMode, and RThreshold, you should see the help file “comm98.chm”.

void CSerialView::OnInitialUpdate()
{
   CFormView::OnInitialUpdate();
   GetParentFrame()->RecalcLayout();
   ResizeParentToFit();
   // COM Port Initialization

   m_comm.SetCommPort(1);    // Com 1
   m_comm.SetSettings("9600,N,8,1");
   m_comm.SetInputLen(1);
   m_comm.SetInputMode(0);
   m_comm.SetRTSEnable(TRUE);
   m_comm.SetRThreshold(1);
   m_comm.SetPortOpen(TRUE);
}

Sending Data

You must begin by updating the data variable from the edit box. Next, you convert data to “Variant”; you can do that by calling the “COLeVariant” class that encapsulates the “Variant” structure.

void CSerialView::OnButton1()
{
   // TODO: Add your control notification handler code here

   UpdateData(TRUE);
   m_comm.SetOutput(COleVariant(m_output));
}

Receiving Data

“GetCommEvent()” permits us to know the event type, if it is equal to 2; it is concern a data arrival in serial port. To retrieve the data from a serial buffer, you must call the GetInput() method, which returns a Variant object. The next step consists of extracting a string from a Variant structure.

void CSerialView::OnOnCommMscomm1()
{
   // TODO: Add your control notification handler code here
   if (m_comm.GetCommEvent()==2 )
   {
      VARIANT in_dat;
      in_dat = m_comm.GetInput();
      CString strInput(in_dat.bstrVal);
      m_input = m_input + strInput;
      UpdateData(FALSE);
   }

}
CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.