none
windows address book(WAB) 請問新增連絡人的流程有哪些? RRS feed

  • 問題

  • 開發工具 Visuall Studio 2005
    關於 新增聯絡人資料的流程
    我使用CreateEntry
    不過有錯誤
    是否還需要其他流程?
    煩請告知  謝謝

    以下為我寫的程式
        ULONG cbEntryID = 0;
        ENTRYID *lpEntryID = NULL;
        ULONG ulCreateFlags = CREATE_CHECK_DUP_LOOSE;
        LPMAPIPROP lpNewEntry = NULL;

        LPABCONT IABContainer;

        IABContainer->CreateEntry(cbEntryID,
                                  lpEntryID,
                                  ulCreateFlags,
                                  &lpNewEntry);
       
        lpNewEntry->SaveChanges(NULL);


    2006年5月9日 上午 09:12

解答


  •         //先用 PR_DEF_CREATE_MAILUSER 這個樣版建立一個新 property,取得回傳的指標dProps

            SizedSPropTagArray(1, ptaCreate) = { 1, { PR_DEF_CREATE_MAILUSER } };

            ULONG cProps = 0;
            LPSPropValue dProps;
            
            // Create the entry
            hResult = lpContainer->GetProps(
                    (LPSPropTagArray)&ptaCreate,
                    0,
                    &cProps,
                    &dProps);

            //用剛剛產生的 property 來建立新 entry      

            // create entry
            hResult = lpContainer->CreateEntry(
                    dProps->Value.bin.cb,
                    (LPENTRYID)dProps->Value.bin.lpb,
                    CREATE_REPLACE,
                    (LPMAPIPROP*)&pRecipient);

            設定新聯絡人的內容

            //set property
            SPropValue lpPropArrayDevil;
            lpPropArray[0].ulPropTag = PR_SURNAME;
            lpPropArray[0].Value.LPSZ = "surname";
            lpPropArray[1].ulPropTag = PR_GIVEN_NAME;
            lpPropArray[1].Value.LPSZ = "givenname";
            lpPropArray[2].ulPropTag = PR_HOME_TELEPHONE_NUMBER;
            lpPropArray[2].Value.LPSZ = "phoneno";
            lpPropArray[3].ulPropTag = PR_MOBILE_TELEPHONE_NUMBER;
            lpPropArray[3].Value.LPSZ = "mobileno";
            lpPropArray[4].ulPropTag = PR_EMAIL_ADDRESS;
            lpPropArray[4].Value.LPSZ = "mailaddr";
            lpPropArray[5].ulPropTag = PR_HOME_ADDRESS_STREET;
            lpPropArray[5].Value.LPSZ = "streetaddr";

            //把內容設定到新聯絡人
            hResult = pRecipient->SetProps(6, lpPropArray, NULL);

           //儲存
            // save change
            hResult = pRecipient->SaveChanges(KEEP_OPEN_READWRITE);

    2006年5月18日 下午 02:44

所有回覆


  •         //先用 PR_DEF_CREATE_MAILUSER 這個樣版建立一個新 property,取得回傳的指標dProps

            SizedSPropTagArray(1, ptaCreate) = { 1, { PR_DEF_CREATE_MAILUSER } };

            ULONG cProps = 0;
            LPSPropValue dProps;
            
            // Create the entry
            hResult = lpContainer->GetProps(
                    (LPSPropTagArray)&ptaCreate,
                    0,
                    &cProps,
                    &dProps);

            //用剛剛產生的 property 來建立新 entry      

            // create entry
            hResult = lpContainer->CreateEntry(
                    dProps->Value.bin.cb,
                    (LPENTRYID)dProps->Value.bin.lpb,
                    CREATE_REPLACE,
                    (LPMAPIPROP*)&pRecipient);

            設定新聯絡人的內容

            //set property
            SPropValue lpPropArrayDevil;
            lpPropArray[0].ulPropTag = PR_SURNAME;
            lpPropArray[0].Value.LPSZ = "surname";
            lpPropArray[1].ulPropTag = PR_GIVEN_NAME;
            lpPropArray[1].Value.LPSZ = "givenname";
            lpPropArray[2].ulPropTag = PR_HOME_TELEPHONE_NUMBER;
            lpPropArray[2].Value.LPSZ = "phoneno";
            lpPropArray[3].ulPropTag = PR_MOBILE_TELEPHONE_NUMBER;
            lpPropArray[3].Value.LPSZ = "mobileno";
            lpPropArray[4].ulPropTag = PR_EMAIL_ADDRESS;
            lpPropArray[4].Value.LPSZ = "mailaddr";
            lpPropArray[5].ulPropTag = PR_HOME_ADDRESS_STREET;
            lpPropArray[5].Value.LPSZ = "streetaddr";

            //把內容設定到新聯絡人
            hResult = pRecipient->SetProps(6, lpPropArray, NULL);

           //儲存
            // save change
            hResult = pRecipient->SaveChanges(KEEP_OPEN_READWRITE);

    2006年5月18日 下午 02:44
  • 不好意思 能在請教一下

    lpContainer以及pRecipient

    分別需要宣告成哪一種type

    LPABCONT lpContainer;
    LPMAPIPROP pRecipient = NULL;

    不知道這樣子宣告是否正確

    我根據這樣子宣告

    程式執行lpContainer 有錯誤

    the variable "lpContainer " is being used without being defined

    是否宣告錯誤?

    還有我看了一些sample code

    不需要開啟PAB嗎?

    GetPAB->OpenEntry->CreateEntry 這是我看到的流程

    煩請告知

    設定聯絡人方面應該是沒有問題sample code也是這樣子設定的

    感謝您的回答

    void main()
    {
            //先用 PR_DEF_CREATE_MAILUSER 這個樣版建立一個新 property,取得回傳的指標dProps

            SizedSPropTagArray(1, ptaCreate) = { 1, { PR_DEF_CREATE_MAILUSER } };

            HRESULT hResult = NULL;
            LPABCONT lpContainer;
            LPMAPIPROP pRecipient = NULL;
            ULONG cProps = 0;
            LPSPropValue dProps;

            // Create the entry
            hResult = lpContainer->GetProps(
                    (LPSPropTagArray)&ptaCreate,
                    0,
                    &cProps,
                    &dProps);

            //用剛剛產生的 property 來建立新 entry      

            // create entry
            hResult = lpContainer->CreateEntry(
                    dProps->Value.bin.cb,
                    (LPENTRYID)dProps->Value.bin.lpb,
                    CREATE_CHECK_DUP_LOOSE,
                    /*(LPMAPIPROP*)*/&pRecipient);

            //設定新聯絡人的內容

            //set property
            SPropValue lpPropArray;
            lpPropArray[0].ulPropTag = PR_SURNAME;
            lpPropArray[0].Value.LPSZ = "surname";
            lpPropArray[1].ulPropTag = PR_GIVEN_NAME;
            lpPropArray[1].Value.LPSZ = "givenname";
            lpPropArray[2].ulPropTag = PR_HOME_TELEPHONE_NUMBER;
            lpPropArray[2].Value.LPSZ = "phoneno";
            lpPropArray[3].ulPropTag = PR_MOBILE_TELEPHONE_NUMBER;
            lpPropArray[3].Value.LPSZ = "mobileno";
            lpPropArray[4].ulPropTag = PR_EMAIL_ADDRESS;
            lpPropArray[4].Value.LPSZ = "mailaddr";
            lpPropArray[5].ulPropTag = PR_HOME_ADDRESS_STREET;
            lpPropArray[5].Value.LPSZ = "streetaddr";

            //把內容設定到新聯絡人
            hResult = pRecipient->SetProps(6, lpPropArray, NULL);

           //儲存
            // save change
            hResult = pRecipient->SaveChanges(KEEP_OPEN_READWRITE);
    }

    2006年5月24日 上午 01:32
  • IABContainer* lpContainer
    LPMAILUSER pRecipient

    可以參考看看這個,有完整的流程
    http://www.sichbo.ca/DotNetCode/1203
    2006年5月30日 上午 05:55