MAIN.CPP
#import "mqoa.dll"no_namespace// MSMQ COM object 
 
#import "..\bin\GraphObj.dll" no_namespace// Point and Line object 
 
#include <stdio.h> 
#include <tchar.h> 
#include <iostream.h> 
#include <mq.h> 
#include "../GraphObj/GraphObj_i.c" // For IID_IPoint and IID_ILine 
#include "../QueueDef.h" 
 
// COM exception handler 
void dump_com_error(_com_error &e) 
{ 
    _tprintf(_T("Oops - hit an error!\n")); 
    _tprintf(_T("\a\tCode = %08lx\n"), e.Error()); 
    _tprintf(_T("\a\tCode meaning = %s\n"), e.ErrorMessage()); 
    _bstr_t bstrSource(e.Source()); 
    _bstr_t bstrDescription(e.Description()); 
    _tprintf(_T("\a\tSource = %s\n"), (LPCTSTR) bstrSource); 
    _tprintf(_T("\a\tDescription = %s\n"), (LPCTSTR) bstrDescription); 
} 
 
 
// Initialize OLE library 
struct InitOle  _init_InitOle_; 
 
void main() 
{ 
    try { 
 
// For these ActiveX components we need only smart interface pointer 
IMSMQQueueInfosPtrpQueueInfos;  
IMSMQQueueInfoPtrpQueueInfo;  
IMSMQQueuePtrpQueue; 
IUnknownPtrpIUnknown; 
 
// Instanciate the follwing ActiveX components 
IMSMQQueryPtrpQuery(__uuidof(MSMQQuery)); 
IMSMQMessagePtrpMessage(__uuidof(MSMQMessage)); 
ILinePtrpLine(__uuidof(Line)); 
IPointPtrpPoint(__uuidof(Point)); 
 
intn = 1; 
_variant_tvarQueueNameInit(STR_QUEUE_LABEL); 
VARIANTvarQueueName; 
 
cout << "\n\nMSMQ IPersistStream Test\n"; 
cout << "==========================\n\n"; 
 
varQueueName = varQueueNameInit.Detach(); 
 
// Find the queue 
pQueueInfos = pQuery->LookupQueue(&vtMissing, &vtMissing, &varQueueName); 
varQueueNameInit.Attach(varQueueName); 
pQueueInfos->Reset(); 
 
if ((pQueueInfo = pQueueInfos->Next()) == NULL) { 
 
//  The queue was not found create it on the local system 
pQueueInfo = new IMSMQQueueInfoPtr( __uuidof(MSMQQueueInfo) ); 
pQueueInfo->PathName = STR_QUEUE_NAME; 
pQueueInfo->Label = STR_QUEUE_LABEL; 
pQueueInfo->Create(); 
cout << "\nNew Queue created\n"; 
} 
 
cout << "Which object should be send ?\n"; 
cout << "1 - Point\n"; 
cout << "2 - Line\n"; 
cout << ":"; 
cin >> n; 
 
 
// Open the queue 
pQueue = pQueueInfo->Open(MQ_SEND_ACCESS, MQ_DENY_NONE); 
 
if (n == 1) { 
// Initialize point object 
pPoint->x = 8; 
pPoint->y = 9; 
pMessage->Body = static_cast<IUnknown*>(pPoint); // The message body gets the IUnknown pointer 
 
} 
else { 
// Initialize line object 
pLine->x1 = 1; 
pLine->y1 = 2; 
pLine->x2 = 3; 
pLine->y2 = 4; 
pMessage->Body = static_cast<IUnknown*>(pLine); // The message body gets the IUnknown pointer 
} 
cout << "Sending Object\n"; 
pMessage->Send(pQueue); 
 
// Close the Queue 
pQueue->Close(); 
 
    } catch (_com_error& e) { 
dump_com_error(e); 
    } 
}