文章編號: 198801 - 上次校閱: 2004年4月30日 - 版次: 3.2

注意: RasEnumEntries 傳回成功,無論緩衝區大小

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

徵狀

Windows CE 上 RasEnumEntries 用於列出遠端存取電話簿中的所有項目名稱。不過,它傳回 0 (成功) 即使您將輸入的緩衝區參數的大小為零。正確的行為應該傳回 ERROR_BUFFER_TOO_SMALL。

解決方案

如果要解決此問題,我們可以 pre-allocate 大的緩衝區接收電話簿項目,並使用 out 參數 lpcEntries"列舉電話簿項目。

下列是範例程式碼:
void OnRasenum()

{

    DWORD cb = 0;
    DWORD cEntries = 0;
    DWORD dwRet;
    DWORD i;
    TCHAR szBuf[1024];
    LPRASENTRYNAME lpRasEntryName = NULL;

    // Pre-alloate a sufficient large buffer for 10 phone book entries.
    lpRasEntryName = (LPRASENTRYNAME) LocalAlloc(LPTR, 10 *
                                                  sizeof(RASENTRYNAME));
    if (lpRasEntryName == NULL)
        return;
    lpRasEntryName->dwSize = sizeof(RASENTRYNAME);
    cb = 10 * sizeof(RASENTRYNAME);

    dwRet = RasEnumEntries(NULL, NULL, lpRasEntryName, &cb, &cEntries);
    if (dwRet == ERROR_BUFFER_TOO_SMALL)
    {
        LocalFree(lpRasEntryName);
        lpRasEntryName = NULL;
        lpRasEntryName = (LPRASENTRYNAME) LocalAlloc(LPTR, cb);
        if (lpRasEntryName == NULL)
            return;
        lpRasEntryName->dwSize = sizeof(RASENTRYNAME);

        if (RasEnumEntries(NULL, NULL, lpRasEntryName, &cb, &cEntries)
                                                                      != 0)
        {
            LocalFree(lpRasEntryName);
            return;
        }
    }
    else if (dwRet != 0)
    {
        LocalFree(lpRasEntryName);
        return;
    }


    // RasEnumEntries success

    wsprintf(szBuf, _T("Phone book entries [%d] in the default \ phonebook:"), cEntries);
    MessageBox(NULL, szBuf, _T("RasEnumEntries"), MB_OK);
    for(i=0;i < cEntries;i++)
    {
        wsprintf(szBuf, _T("%s"),lpRasEntryName->szEntryName);
        MessageBox(NULL, szBuf, _T("RasEnumEntries"), MB_OK);
        lpRasEntryName++;
    }
    if (lpRasEntryName)
        LocalFree(lpRasEntryName);
    return;

}

狀況說明

Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有此問題。

這篇文章中的資訊適用於:
  • Microsoft Windows CE 2.0 for the Handheld PC
  • Microsoft Windows CE 1.0
關鍵字:?
kbmt kbbug kbpending KB198801 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:198801? (http://support.microsoft.com/kb/198801/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。