建置和偵錯 Visual C++ 裝置專案
更新:2007 年 11 月
建置和偵錯裝置專案與建置和偵錯桌上型電腦專案稍微有點不同。
以下是建置和偵錯技巧的清單:
根據預設,裝置專案的執行緒模型是無限制的。不過,如果您在建置 CE OS 映像時未選擇 DCOM 選項,Windows CE 就無法完整支援 COM 封送處理 (Marshaling) 和關聯的定義。因此,在某些 CE 平台上,編譯器 (Compiler) 可能會產生 DCOM 支援以及單一和多執行緒定義的相關警告。這項警告是要通知您在自己的程式碼中處理執行緒和同步處理。例如,當您編譯 ATL 裝置專案時,此編譯器可能會發出有關定義 _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA 的警告。當您在 Windows Mobile 平台上建立 COM 物件、使用 Web 服務和 ATL COM 物件時,也會發生這種情況。您可以針對單一執行緒的物件,在主標頭檔 (Header File) 中定義這個旗標,方法如下:#define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA。如果您的程式碼正在處理多執行緒,您就可以放心地略過這則警告。如需 Windows CE 上 COM、DCOM 和執行緒模型的詳細資訊,請參閱 Windows CE 5.0 文件中的 COM 執行緒和處理序和<元件服務>(COM 和 DCOM)。
根據預設,原生裝置應用程式是以靜態連結所建立的。如果您決定切換為動態連結,可將下列執行階段 DLL 加入至 [其他檔案] 專案屬性:
MFC 應用程式發行的組建組態
將下列執行階段 DLL 加入至 [其他檔案] 專案屬性:msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;MFC80U.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;
MFC 應用程式偵錯組建組態
將下列執行階段 DLL 加入至 [其他檔案] 專案屬性:msvcr80d.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;MFC80Ud.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;
ATL 應用程式發行的組建組態
將下列執行階段 DLL 加入至 [其他檔案] 專案屬性:msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;
ATL 應用程式偵錯組建組態
將下列執行階段 DLL 加入至 [其他檔案] 專案屬性:msvcr80d.dll|$(BINDIR)\$(INSTRUCTIONSET)\%CSIDL_PROGRAM_FILES%\<projectname>|0;msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\%CSIDL_PROGRAM_FILES%\<projectname>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\%CSIDL_PROGRAM_FILES%\<projectname>|0;
如需 Windows CE DLL 載入的詳細資訊,請參閱 Windows CE DLL 載入 LoadLibrary。
注意事項: 當您同時從不同的目錄載入名稱相同的多個 DLL (例如 \Windows\aDLL.dll 和 \Program Files\aDLL.dll) 時,可能會造成非預期的結果。建議您一次載入一個 DLL 的複本,或預期呼叫第一個載入的 DLL。
以下是一些其他考量事項:
當您移植至 MFC 8.0 # 時,請定義 _WIN32_WCE_PSPC。根據預設,MFC8.0 中並未定義這個旗標。
當您在 [針對架構編譯] 下拉式清單中,以 Pocket PC 2003 或 Smartphone 2003 為目標時,並不支援 [ARM4T] 選項。若要在 [<project name> 屬性頁] 對話方塊中找到這個清單,請依序按一下 [組態屬性]、[C/C++] 和 [進階],然後選取 [針對架構編譯]。
GAPI 函式適用於 C++ 但不適用於 C。在程式碼中加入 gx.h 只有從 C++ 開始才有效。如果您正在程式碼中使用 GAPI,請勿使用 /TC 編譯器選項進行編譯。
在裝置的 MFC 8.0 中,您可以控制 CommandBar 的建立和插入。但是,不再支援 CDialog::m_pWndEmptyCB 成員。這個成員是用來指向空的 CCommandBar 類別 (為對話方塊所建立),又稱為 Pocket PC 上的 MenuBar,而且您可以參考它以便插入您自己的 MenuBar。
Checked::_strlwr_s、_strlwr_s_l、_mbslwr_s, _mbslwr_s_l、_wcslwr_s、_wcslwr_s_l、Checked::tcslwr_s 和 Checked::gcvt_s 都是為使用 Windows CE 的平台而提供的。
不再定義 _WIN32_WCE_PSPC 旗標。不過,您可以使用 _WIN32_WCE_PSPC WIN32_PLATFORM_PSPC 旗標做為解決方法。
針對 STL 應用程式移植,加入 <deque> 以取代 #include <deque.h>。
整合式開發環境 (IDE) 可支援多重平台。在裝置專案的對話方塊資源中裝載 MFC 或 ATL ActiveX 物件時,應該要在對等的桌上型電腦 ActiveX 專案中建立和註冊對等的控制項。您可以在資源編輯器中將該控制項加入至裝置對話方塊範本,並且正確地執行。桌上型電腦和裝置版本的 ActiveX 控制項應該會含有相同的 GUID 和設計階段屬性,例如背景色彩。
請參閱
工作
概念
參考
<Projectname> 屬性頁對話方塊 (裝置)、組態屬性、偵錯