Outlook オブジェクト モデルを使用して、MAPI では、Visual C 6.0 から取得するエントリ ID と、メッセージを開く方法

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:304894
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
はじめに
この資料で、PR_ENTRYID の使用方法を示しています。取得したプロパティを開き、項目を使用して表示するには、MAPI を拡張、Outlook のオブジェクト モデルです。
詳細
このサンプル プロジェクトでは、Microsoft Visual を作成するにはC++ では、次の手順を実行します。
  1. Visual Studio を開き、という新しい Win32 アプリケーションを作成します。"OOMEntryID"、および選択 簡単な Win32 アプリケーション.
  2. OOMEntryID.cpp ファイルを開き、その全体を交換してください。次のコードの内容。Mso.dll にパスを変更することを確認し、Msoutl.olb 音がします。
    #include "stdafx.h"#include "edk.h"// Import Outlook object model.#define IMPPROPS rename_namespace("OL")// Define this according to the Outlook object model // version you are compiling under.//#define OL2000 // Outlook 2000#define OL2002 // Outlook 2002 (2002)#if defined(OL2000)  // TODO: Verify that the path to the file is correct.  #import "c:\Program Files\Microsoft Office\Office\mso9.dll" IMPPROPS   #import "c:\Program Files\Microsoft Office\Office\msoutl9.olb" IMPPROPS#elif defined(OL2002)  // TODO: Verify that the path to the file is correct.  #import "c:\Program Files\Common Files\Microsoft Shared\Office10\mso.dll" IMPPROPS   #import "c:\Program Files\Microsoft Office\Office10\\msoutl.olb" IMPPROPS#endifstruct StartOle {   StartOle() { CoInitialize(NULL); }   ~StartOle() { CoUninitialize(); }} _inst_StartOle;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);}using namespace OL;int APIENTRY WinMain(HINSTANCE hInstance,                     HINSTANCE hPrevInstance,                     LPSTR     lpCmdLine,                     int       nCmdShow){  // MAPI session pointer.  LPMAPISESSION  pSession = NULL;   HRESULT hRes = S_OK;    // Please add error checking yourself.  // Initialize MAPI.  hRes = MAPIInitialize(NULL);  // Log on to MAPI and get a session pointer.  hRes = MAPILogonEx(0, NULL, NULL, MAPI_LOGON_UI, &pSession);  // Open message store.  ULONG      cbEIDStore = 0;  LPENTRYID  lpEIDStore = NULL;  IMsgStore  *pMsgStore;  hRes = HrMAPIFindDefaultMsgStore(pSession,                   &cbEIDStore,                   &lpEIDStore);  hRes = pSession->OpenMsgStore(NULL,                   cbEIDStore,                   lpEIDStore,                   NULL,                   MAPI_BEST_ACCESS,                   &pMsgStore);    // Open Inbox.  ULONG        ulObjType;  ULONG        cbEntryID;  LPENTRYID    lppEntryID;  IMAPIFolder  *lpFolder;  hRes = pMsgStore->GetReceiveFolder(NULL,                      NULL,                      &cbEntryID,                      &lppEntryID,                      NULL);  hRes = pMsgStore->OpenEntry(cbEntryID,                 lppEntryID,                 NULL,                 MAPI_BEST_ACCESS,                 &ulObjType,                 (LPUNKNOWN *)&lpFolder);  // Get Inbox items.  LPMAPITABLE  lpContentsTable = NULL;  LPSRowSet    pRows = NULL;  enum {ePR_SUBJECT, ePR_ENTRYID,  NUM_COLS};  static SizedSPropTagArray(NUM_COLS,sptCols)   = {NUM_COLS, PR_SUBJECT, PR_ENTRYID};    hRes = lpFolder->GetContentsTable(0,                     &lpContentsTable);  hRes = HrQueryAllRows(lpContentsTable,               (LPSPropTagArray) &sptCols,               NULL,               NULL,               0,               &pRows);    if (pRows->cRows > 0) // Make sure there is at least one message.  {    // Get the first item in the Inbox and get its entry ID.    IMessage    *lpMessage;    LPSPropValue  pspvEID = NULL;    hRes = pMsgStore->OpenEntry(pRows->aRow[0].lpProps[ePR_ENTRYID].Value.bin.cb,                              (LPENTRYID)pRows->aRow[0].lpProps[ePR_ENTRYID].Value.bin.lpb,                              NULL,                              MAPI_BEST_ACCESS,                              &ulObjType,                              (LPUNKNOWN *)&lpMessage);        hRes = HrGetOneProp(lpMessage,               PR_ENTRYID,               &pspvEID);        char szEID[1001];    HexFromBin(pspvEID[0].Value.bin.lpb,                pspvEID[0].Value.bin.cb,                szEID);    // Open Outlook item using the entry ID we got from MAPI.    try{      OL::_ApplicationPtr  pOutlook("Outlook.Application");      OL::_NameSpacePtr    pNameSpace = pOutlook->GetNamespace("MAPI");      OL::_MailItemPtr     pMailItem = NULL;      pMailItem = pNameSpace->GetItemFromID(szEID, vtMissing);      if (pMailItem)      {        // Display message.        pMailItem->Display(vtMissing);      }    }     catch (_com_error &e)    {      dump_com_error(e);    }    UlRelease(lpMessage);  }  else  {    MessageBox(NULL,            "There are no messages in the inbox",            "Open Item",            MB_OK);  }  pSession->Logoff(NULL, 0L, 0);  FreeProws(pRows);  UlRelease(lpContentsTable);  UlRelease(lpFolder);  UlRelease(pMsgStore);  UlRelease(pSession);  return 0;} 					
  3. で、 プロジェクト メニューをクリックして 設定.クリックして、 リンク タブおよび選択 入力 として分類します。

    は、 [オブジェクト/ライブラリ モジュールで、次のコード追加します。
    MSVCRT.LIB addrLkup.lib edkguid.lib edkdebug.lib edkmapi.lib edkutils.lib mapi32.lib						
    は、 ライブラリを無視します。 libcd.lib、libc.lib を追加します。

    閉じる、 プロジェクトの設定 ダイアログ ボックスです。
  4. ビルドして、プロジェクトを実行します。
  5. 受信トレイの最初のメッセージになります表示します。
関連情報
詳細については、Knowledge Base の資料を参照するのには、次の資料番号をクリックしてください。
259298#Import ステートメントを使用して Visual C から Outlook オブジェクト モデルを使用する方法

警告: この記事は自動翻訳されています

プロパティ

文書番号:304894 - 最終更新日: 12/06/2015 04:31:43 - リビジョン: 7.0

  • kbnosurvey kbarchive kbhowto kbmsg kbprogramming kbemail kbopenfile kbmt KB304894 KbMtja
フィードバック