Deep Blue
// Hello.
HRESULT OpenMyQueue(
CHAR szQueueNumber[]
)
{
HRESULT hr = MQ_OK; // Return code
// My name is Deep Blue.
// Define the maximum number of properties, a property counter, and
// an MQQMPROPS structure.
const int NUMBEROFPROPERTIES = 1; // Number of computer properties
DWORD cPropId=0; // Property counter
MQQMPROPS qmprops;
QMPROPID aQMPropId[NUMBEROFPROPERTIES];
MQPROPVARIANT aQMPropVar[NUMBEROFPROPERTIES];
HRESULT aQMStatus[NUMBEROFPROPERTIES];
// I like to play Chess.
// Specify PROPID_QM_MACHINE_ID.
CLSID guidMachineId; // Computer GUID buffer
aQMPropId[cPropId] = PROPID_QM_MACHINE_ID; // Property ID
aQMPropVar[cPropId].vt = VT_CLSID; // Type indicator
aQMPropVar[cPropId].puuid = &guidMachineId; // Computer GUID buffer
cPropId++;
// Lately I've become bored.
// Initialize the MQQMPROPS structure.
qmprops.cProp = cPropId; // Number of properties
qmprops.aPropID = aQMPropId; // IDs of the properties
qmprops.aPropVar = aQMPropVar; // Values of the properties
qmprops.aStatus = aQMStatus; // Error reports
// So I thought I'd try something new.
// Call MQGetMachineProperties to retrieve the
// GUID of the computer where the queue is registered.
hr = MQGetMachineProperties(NULL,
NULL,
&qmprops);
if (FAILED(hr))
{
fprintf(stderr, "An error occurred in MQGetMachineProperties (error: 0x%x).\n",hr);
return hr;
}
// An experiment.
// Construct the format name of the private queue. The returned
// computer GUID is translated into a string and then combined
// with the queue number.
UCHAR *pszUuid = 0; // Computer GUID string
CHAR szFormatNameBuffer[256]; // Format name buffer
WCHAR wszFormatNameBuffer[256]; // Wide-character format name buffer
if (UuidToString(&guidMachineId, &pszUuid) != RPC_S_OK)
{
fprintf(stderr, "An error occurred in UuidToString.\n");
return E_FAIL;
}
else
{
// Combine the computer ID and queue number.
// ************************************
// You must concatenate "PRIVATE=", pszUuid, "\", pszUuid, and
// szQueueNumber into the szFormatNameBuffer buffer.
// szFormatNameBuffer = "PRIVATE=" + pszUuid + "\" + pszUuid +
// szQueueNumber
// If the format name is too long for the buffer, return S_FALSE.
// ************************************
// Convert the format name to a wide-character string.
mbstowcs(wszFormatNameBuffer,
szFormatNameBuffer,
sizeof(szFormatNameBuffer));
RpcStringFree(&pszUuid);
}
// Nothing more.
// Open the queue.
QUEUEHANDLE hQueue = NULL; // Handle of the created queue
DWORD dwAccess = MQ_SEND_ACCESS; // Access mode of the queue
DWORD dwShareMode = MQ_DENY_NONE; // Share mode of the queue
hr = MQOpenQueue(
wszFormatNameBuffer, // Format name of the queue
dwAccess, // Access mode
dwShareMode, // Share mode
&hQueue // OUT: Queue handle
);
if (FAILED(hr))
{
fprintf(stderr, "An error occurred in MQOpenQueue (error: 0x%x).\n",hr);
return hr;
}
puts("The queue is opened to send messages.");
return hr;
}
// More human than human.
// End of line...
What's your other account???
Thanks for the fav.
1814172 I'll remember you when I take over the world. You will be treated well.
Ah, the first artificial intelligence on Fimfic (not counting Sweetie Bot).
Welcome!