MSMQ échantillons en C ++?

Quelqu’un peut-il me donner des exemples de travail sur la façon de créer, append des messages, lire et détruire une queue de messages privés à partir d’API C ++? J’ai essayé les morceaux de code MSDN mais je ne peux pas les faire fonctionner correctement.

Merci

En fait, c’est le code qui m’intéressait:

#include "windows.h" #include "mq.h" #include "tchar.h" HRESULT CreateMSMQQueue( LPWSTR wszPathName, PSECURITY_DESCRIPTOR pSecurityDescriptor, LPWSTR wszOutFormatName, DWORD *pdwOutFormatNameLength ) { // Define the maximum number of queue properties. const int NUMBEROFPROPERTIES = 2; // Define a queue property structure and the structures needed to initialize it. MQQUEUEPROPS QueueProps; MQPROPVARIANT aQueuePropVar[NUMBEROFPROPERTIES]; QUEUEPROPID aQueuePropId[NUMBEROFPROPERTIES]; HRESULT aQueueStatus[NUMBEROFPROPERTIES]; HRESULT hr = MQ_OK; // Validate the input parameters. if (wszPathName == NULL || wszOutFormatName == NULL || pdwOutFormatNameLength == NULL) { return MQ_ERROR_INVALID_PARAMETER; } DWORD cPropId = 0; aQueuePropId[cPropId] = PROPID_Q_PATHNAME; aQueuePropVar[cPropId].vt = VT_LPWSTR; aQueuePropVar[cPropId].pwszVal = wszPathName; cPropId++; WCHAR wszLabel[MQ_MAX_Q_LABEL_LEN] = L"Test Queue"; aQueuePropId[cPropId] = PROPID_Q_LABEL; aQueuePropVar[cPropId].vt = VT_LPWSTR; aQueuePropVar[cPropId].pwszVal = wszLabel; cPropId++; QueueProps.cProp = cPropId; // Number of properties QueueProps.aPropID = aQueuePropId; // IDs of the queue properties QueueProps.aPropVar = aQueuePropVar; // Values of the queue properties QueueProps.aStatus = aQueueStatus; // Pointer to the return status WCHAR wszFormatNameBuffer[256]; DWORD dwFormatNameBufferLength = sizeof(wszFormatNameBuffer)/sizeof(wszFormatNameBuffer[0]); hr = MQCreateQueue(pSecurityDescriptor, // Security descriptor &QueueProps, // Address of queue property structure wszFormatNameBuffer, // Pointer to format name buffer &dwFormatNameBufferLength); // Pointer to receive the queue's format name length if (hr == MQ_OK || hr == MQ_INFORMATION_PROPERTY) { if (*pdwOutFormatNameLength >= dwFormatNameBufferLength) { wcsncpy_s(wszOutFormatName, *pdwOutFormatNameLength - 1, wszFormatNameBuffer, _TRUNCATE); wszOutFormatName[*pdwOutFormatNameLength - 1] = L'\0'; *pdwOutFormatNameLength = dwFormatNameBufferLength; } else { wprintf(L"The queue was created, but its format name cannot be returned.\n"); } } return hr; } 

Cela crée probablement une queue … mais il manque certaines parties pour que cela fonctionne, c’est pourquoi j’ai besoin d’un exemple simple qui fonctionne.

Vous ne savez pas très bien comment vous allez créer ou détruire des files de messages. Windows devrait en créer un par thread.

Si vous utilisez MFC, toutes les classes dérivées CWinThread et CWnd ont une queue de messages à laquelle accéder (à l’aide de PostMessage ou PostThreadMessage et de la macro ON_COMMAND). Pour faire quelque chose de similaire avec l’API Windows, je pense que vous devez écrire votre propre pompe de message, quelque chose comme la méthode d’exécution de CWinApp.

 MSG msg; BOOL bRet; while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0) { if (bRet == -1) { // handle the error and possibly exit } else { TranslateMessage(&msg); DispatchMessage(&msg); } } 

… est l’exemple de la documentation MSDN. Est-ce ce que vous utilisez? Qu’est-ce qui ne fonctionne pas?