共用方式為


從 eMbedded Visual C++ 移植的已知問題

更新:2007 年 11 月

有一些 C++ 工具和資源可協助您將現有的 eMbedded Visual C++ 專案轉換到 Visual Studio。如需詳細資訊,請參閱 eMbedded Visual C++ 至 Visual Studio 升級精靈

自從引進 eMbedded Visual C++ 之後,Active Template Library (ATL)、Microsoft Foundation Class (MFC) 及 Standard C++ 程式庫都已經更新並進行過變更。如需不支援之類別清單,請參閱從 MFC 3.0 到 9.0 不支援之 eVC 類別的清單。您必須修改呼叫這些類別的程式碼,才能在 Visual Studio 中進行編譯。下列問題通常會在從 eMbedded Visual C++ 移植時發生。

問題

說明/解決方法

如果是比 Windows CE 3.0 還要新的裝置,則無法在裝置 MFC 中呼叫 CCeSocket::OnReceive() 方法。

解決方法會在說明及支援知識庫文件中討論:Bug:無法對接受的資料通訊端呼叫 CCeSocket OnReceive() (英文)。

不支援 CArchive Class

許多 eMbedded Visual C++ 專案都包含 CArchive Class 類別的參考。若要解決這個問題,您必須移除 CArchive 的參考。

某些集合類別 (Collection Class) (例如 CObArray、CMapPtrToPtr 等等),都會使用 CArray<>、CMap<> 等的範本版本在 Windows CE 5.0 中實作。在 eMbedded Visual C++ 4.0 版和桌上型電腦 C++ 程式庫中,這些型別會實作為非範本的一般類別。因此,在這些範本類別上呼叫 IMPLEMENT_SERIAL 會導致編譯錯誤:

錯誤 C2039: 'classCObArray': 不是 'CArray<TYPE,ARG_TYPE>' 的成員

錯誤 C2065: 'classCObArray': 未宣告的識別項

若要在實作中解決這項差異,請變更您的 IMPLEMENT_SERIAL 巨集,讓它使用 CObject,而不是使用 CObArray 和 CMapPtrToPtr 等。

換句話說,請勿撰寫下列程式碼:

IMPLEMENT_SERIAL(CYourClass, CObArray, 0)

請改用下列程式碼:

IMPLEMENT_SERIAL(CYourClass, CObject, 0)

根據預設,eMbedded Visual C++ 4.0 版會將 MFC Pocket PC 應用程式的對話方塊樣式設定為 DS_MODALFRAME。在 MFC 9.0 中則不再支援這個樣式。

範例

本章節概述從 eMbedded Visual C++ 移轉到 Visual Studio 時,可能會遭遇到的一些較為常見的錯誤。如需詳細資訊,請參閱從 Microsoft eMbedded Visual C++ 專案移轉至 Visual Studio 2005 (英文)。

  • 編譯錯誤: 無法開啟包含檔 'wceres.rc'

    以滑鼠右鍵按一下專案資源檔 (RC),按一下 [檢視程式碼],然後將下列一行標記為註解:

    //#include "wceres.rc"
    
  • 沒有定義 NUM_TOOL_TIP

    在標頭檔中,針對 Pocket PC 組態定義 #define _WIN32_WCE_PSPC,以及針對 Smartphone 組態定義 _WIN32_WCE_WFSP。

  • 無法開啟 OLDNAMES.lib 檔案

    在 [方案總管] 中,以滑鼠右鍵按一下此專案檔,然後按一下 [屬性]。

    再按一下 [連結器],藉由加入 OLDNAMES.LIB 以編輯 [忽略特定程式庫] 屬性。

  • 模稜兩可的多載

    標準 C++ 程式庫 (Standard C++ Library,SCL) 和 ATL 所具有的 API 也都在裝置 SDK 中。應加上命名空間避免發生意義模糊不清的情況,例如 ::。

  • 模組電腦類型 'THUMB' 與目標電腦類型 'ARM' 衝突

    在 [方案總管] 中,以滑鼠右鍵按一下此專案檔,然後按一下 [屬性]。

    在 [組態屬性] 下,展開 [連結器],然後按一下 [命令列] 屬性。針對每一個 Windows Mobile 5.0 組態,在 [屬性] 頁面中從命令列移除 /MACHINE:THUMB 參數。

  • 沒有正確分隔資源字串

    如果移植之應用程式中的資源字串沒有正確地分隔,就可能會發生問題。在 [方案總管] 中,以滑鼠右鍵按一下此專案檔,然後按一下 [屬性]。在 [組態屬性] 下,展開 [資源],然後按一下 [命令列] 屬性。 將 -n 參數加入至資源編譯器命令列。

  • 對話方塊錯誤中必須有 BEGIN

    這個錯誤通常跟隨著「找不到檔案」的錯誤,例如「找不到檔案: 0x1」。請移至錯誤所指示的 RC 檔,然後修改程式碼,在 FONT 宣告上下使用 #ifdef 陳述式,如下列程式碼範例所示。

    原來的程式碼:

    IDD_COMPTEST DIALOGEX 0, 0, 186, 95
    STYLE DS_SETFONT | WS_CHILD
    EXSTYLE WS_EX_CONTROLPARENT
    FONT 8, "MS Sans Serif", 0, 0, 0x1
    BEGIN
    END
    

    修改後的程式碼:

    IDD_COMPTEST DIALOGEX 0, 0, 186, 95
    STYLE DS_SETFONT | WS_CHILD
    EXSTYLE WS_EX_CONTROLPARENT
    #ifdef _WIN32_WCE
    FONT 8, "MS Sans Serif"
    #else
    FONT 8, "MS Sans Serif", 0, 0, 0x1
    #endif
    BEGIN
    END
    

請參閱

概念

eMbedded Visual C++ 至 Visual Studio 升級精靈

其他資源

適用於程式開發人員的 Windows Mobile 平台移轉 FAQ