HOWTO: Set and Clear an Active Messaging MessageFilter via VC++

Last reviewed: November 21, 1997
Article ID: Q171429
The information in this article applies to:
  • Collaboration Data Objects (CDO), version 1.1

SUMMARY

Changes to the Active Messaging MessageFilter properties appear to have no effect.

MORE INFORMATION

The following code sample shows how to activate, then deactivate an Active Messaging MessageFilter via Visual C++.

The key to successfully shutting or altering the MessageFilter is to be sure to destroy any reference that is made to any object related to the MessageFilter (also known as Folder:MessagesCollection:MessageFilter).

Code Sample:

   /**********************************************************/
   // MSGFILTER.CPP
   // -------------
   // This program demonstrates how the Active Messaging v1.1
   // MessageFilter works via VC++. This sample requires VC++
   // version 5.0 or higher.
   /**********************************************************/

   #import <olemsg32.dll> no_namespace

   #include <assert.h>
   #include <stdio.h>
   #include <tchar.h>

   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);
    }

   // If this is placed in the scope of the smart pointers, they must be
   // explicitly Release(d) before CoUninitialize() is called.  If any
   // reference count is non-zero, a protection fault will occur.
   struct StartOle {
      StartOle() { CoInitialize(NULL); }
      ~StartOle() { CoUninitialize(); }
   } _inst_StartOle;

   void main()
   {
   try
      {
          // Create a MAPI.Session pointer
          SessionPtr pSession("MAPI.Session");

          // Logon using the specified profile
          pSession->Logon("YourValidProfileNameHere");

          // Create pointer to the Inbox Folder
          FolderPtr pFolder = pSession->Inbox;

          // Create pointer to the Messages Collection
          MessagesPtr pMessages = pFolder->Messages;

          // Get the first Message object before filter is applied
          MessagePtr pAMessage = pMessages->GetFirst();

          // Process contents of Folder
          while (pAMessage != NULL)
          {
              // Display Properties
              MessageBoxW (NULL,pAMessage->Subject.bstrVal,NULL,MB_OK);

              // Get next Message
              pAMessage = NULL;
              pAMessage = pMessages->GetNext();
          }

          // Destroy the reference to the to the Inbox, Messages
          // Collection, and Message then reaquire them
          pFolder = NULL;
          pMessages = NULL;
          pAMessage = NULL;

          // Aquire pointer to the Inbox Folder
          pFolder = pSession->Inbox;

          // Aquire pointer to the Messages Collection
          pMessages = pFolder->Messages;

          // Acquire pointer and set properties of the MessageFilter
          MessageFilterPtr pMsgFilt = pMessages->Filter;
          pMsgFilt->Unread = (bool)TRUE;

          // Get the first Message object after filter is applied
          pAMessage = pMessages->GetFirst();

          // Process contents of Folder
          while (pAMessage != NULL)
          {
              // Display Properties
              MessageBoxW (NULL,pAMessage->Subject.bstrVal,NULL,MB_OK);

              // Get next Message
              pAMessage = NULL;
              pAMessage = pMessages->GetNext();
          }

          // Destroy the reference to the Inbox, Messages Collection,
          // MessageFilter, and Message then reaquire them
          pFolder = NULL;
          pMessages = NULL;
          pMsgFilt = NULL;
          pAMessage = NULL;

          // GetFirst() without a filter in place
          // Aquire pointer to the Inbox Folder
          pFolder = pSession->Inbox;

          // Aquire pointer to the Messages Collection
          pMessages = pFolder->Messages;

          // Get the first Message object after filter is unapplied
          pAMessage = pMessages->GetFirst();

          // Process contents of Folder
          while (pAMessage != NULL)
          {
              // Display Properties
              MessageBoxW (NULL,pAMessage->Subject.bstrVal,NULL,MB_OK);

              // Get next Message
              pAMessage = NULL;
              pAMessage = pMessages->GetNext();
          }

          // Logoff of the MAPI Session
          pSession->Logoff();
      }
      catch (_com_error &e)
      {
          dump_com_error(e);
      }
   }

REFERENCES

For additional information about Collaboration Data Objects versus Active Messaging, please see the following article in the Microsoft Knowledge Base:

   ARTICLE-ID: Q176916
   TITLE     : INFO: Active Messaging and Collaboration Data Objects (CDO)

Keywords          : kbcode ActMsg
Version           : WINDOWS:1.1
Platform          : WINDOWS


================================================================================


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: November 21, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.