MSMQ Transaction problem - use of undefined type 'ITransaction' generated at compile time...


    I am trying to use an MSMQ internal transaction in a call to MQReceiveMessage and at compile time am getting the following errors:

filename.cpp(600) : error C2027: use of undefined type 'ITransaction'
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\mq.h(26) : see declaration of 'ITransaction'
filename.cpp(600) : error C2227: left of '->Release' must point to class/struct/union
Error executing cl.exe.
Creating browse info file...

The code I have (which for the most part came directly off the MSDN website's MSMQ examples page) looks as follows:

ITransaction *pTransaction;  // Pointer to transaction object

// Initiate an internal transaction.
hr = MQBeginTransaction(&pTransaction);

hr = MQReceiveMessage(
                          pLinkUserData->hQueue,            // Queue handle
                          pLinkUserData->receiveTimeout,   // Max time to (msec) to receive the message
                          pLinkUserData->receiveAction,   // Receive action
                          &msgprops,                   // Message property structure
                          NULL,                         // No OVERLAPPED structure
                          NULL,                        // No callback function
                          pLinkUserData->hCursor,     // No cursor handle
                          pTransaction                 // Join in a transaction

      if (FAILED(hr))
          pTransaction->Release();  // <--- line 600 where the errors are being generated upon compilation.

Based on the errors I am getting my suspicion is that I may have the wrong version of MQ.H although I recently went through the painful experience of downloading and installing the entire latest windows SDK kit for a related reason in which MQReceiveMessageByLookupId was not declared in the MQ.H I previously had.

My point is that I believe I have the latest version of MQ.H at this point and am still getting the errors outlined above.. has anyone seen this and know how I can get past this problem? if I am doing something wrong Please let me know, if this is yet another MQ.H versioning problem, then the joy I am having just can't be measured...! Btw, I am on Windows XP Pro running MSMQ 3.0



PS: I have cross-posted this question in the Windows Programming topic area.
adgarcia13Enterprise ArchitectAsked:
Who is Participating?
jkrConnect With a Mentor Commented:
It seems that you forgot to

#include <transact.h>


#include <mq.h>

The header states:

//  Clients that need transactions should include transact.h before mq.h
//  For the clients not needing transactions - ITransaction is  opaque
adgarcia13Enterprise ArchitectAuthor Commented:

That would be correct! Thanks jkr.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.