BOOL CMSMQTestDlg::OnTest()
{
    CString oError;     // Dane bdu.
    CString oText;      // Elementy tekstu wiadomoci.

    // Inicjalizacja rodowiska COM.
    CoInitialize(NULL);

    try
    {
        // Zawsze utwrz informacj o kolejce i jej strukturze
        // w bloku przechwytujcym.
        IMSMQQueueInfoPtr   qInfo("MSMQ.MSMQQueueInfo");
        IMSMQQueuePtr       qObject;
        IMSMQMessagePtr     qMessage("MSMQ.MSMQMessage");

        // Rozpocznij od podania struktury kolejki.
        qInfo->PathName = ".\\TestQueue";    
        qInfo->Label = "Kolejka testowa";

        // Utwrz kolejk w razie potrzeby.
        try
        {
            qInfo->Create();
        }
        catch (_com_error comerr)
        {
            // Sprawd zwrcon warto.
            HRESULT hr = comerr.Error();

            // Brak problemw, jeli kolejka ju istnieje. 
            // W przeciwnym wypadku wywietl bd.
            if (hr != MQ_ERROR_QUEUE_EXISTS)
            {
                throw comerr;
            }
        }

        // Otwrz kolejk do uycia.
        qObject = qInfo->Open(MQ_SENDRECEIVE_ACCESS, MQ_DENY_NONE);

 	// Sformatuj i wylij wiadomo.
        m_msgBody.GetWindowText(oText.GetBuffer(80), 80);
        oText.ReleaseBuffer(-1);
        qMessage->Body = oText.GetBuffer(80);

        m_msgLabel.GetWindowText(oText.GetBuffer(80), 80);
        oText.ReleaseBuffer(-1);
        qMessage->Label = oText.GetBuffer(80);

        m_priority.GetWindowText(oText);
        qMessage->Priority = atoi(oText.GetBuffer(2));
        oText.ReleaseBuffer(-1);

        qMessage->SenderIdType = MQMSG_SENDERID_TYPE_SID;

        qMessage->Send(qObject);

        // Zamknij kolejk po zakoczeniu pracy.
        qObject->Close();

    }

    // Wywietl informacje o bdzie.
    catch (_com_error comerr)
    {
        HRESULT hr = comerr.Error();
        ltoa(hr, oError.GetBuffer(20), 10);
        oError.ReleaseBuffer(-1);
        AfxMessageBox("nieoczekiwany bd: " + oError);
    }

    // Usu rodowisko COM.
    CoUninitialize();

}
