2025-04-27 07:49:33 -04:00

95 lines
2.3 KiB
C++

#include "stdafx.h"
#include "..\QueueDef.h"
#import "mqoa.tlb" no_namespace // MSMQ COM object
#ifdef _DEBUG
#import "..\GraphObj\DebugU\GraphObj.dll" \
no_namespace // Point and Line object
#else
#import "..\GraphObj\ReleaseU\GraphObj.dll" \
no_namespace // Point and Line object
#endif
// Initialize OLE library
struct InitOle _init_InitOle_;
void main()
{
try {
// For these ActiveX components we need only smart interface pointer
IMSMQQueueInfosPtr pQueueInfos;
IMSMQQueueInfoPtr pQueueInfo;
IMSMQQueuePtr pQueue;
IUnknownPtr pIUnknown;
// Instanciate the follwing ActiveX components
IMSMQQueryPtr pQuery(__uuidof(MSMQQuery));
IMSMQMessagePtr pMessage(__uuidof(MSMQMessage));
ILinePtr pLine(__uuidof(Line));
IPointPtr pPoint(__uuidof(Point));
int n = 1;
_variant_t varQueueNameInit(STR_QUEUE_LABEL);
VARIANT varQueueName;
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);
}
}