Listing 2: Implementation of trace API

// QMonitorAPI.cpp
#include <stdio.h>
#include "QMonitorAPI.h"

void Display(const char* frmt,...)
{
    HWND hwnd = ::FindWindow(NULL, "QMonitor");
    if (hwnd != NULL)
    {
        char temp[1024]; // be careful not to 
                         // overrun this buffer
        va_list args;
        va_start(args, frmt);
        vsprintf(temp, frmt, args);
        va_end(args);

        COPYDATASTRUCT cs;
        cs.dwData = GetCurrentProcessId();
        cs.lpData = (PVOID)temp;
        cs.cbData = strlen(temp) + 1;
        ::SendMessage(hwnd, WM_COPYDATA,
            (WPARAM)NULL, (LPARAM)&cs);
    }
}

Tracer::Tracer(const char* szTitle)
{
    pTitle = new char[strlen(szTitle) + 1];
    strcpy(pTitle, szTitle);
    Display("Enter %s", pTitle);
}

Tracer::~Tracer()
{
    Display("Exit  %s", pTitle);
    delete pTitle;
}