簡體   English   中英

將 C++ 代碼從 Win32 平台更改為 WinCE

[英]change C++ code from Win32 platform to WinCE

我在 C++ 中有一個 Win32 應用程序。

我要生成的是與 WinCE 兼容的此應用程序的 an.exe。 我認為最好改變我的平台。 但是在智能設備平台運行代碼時,出現了很多錯誤? 更改源代碼的最佳方法是什么?

這條路可能很簡單,也可能非常困難。 取決於源代碼。 很少有在一開始就沒有考慮設備的情況下編寫的代碼無需更改就能正常工作的情況。 第一步是將所有代碼導入到針對您的設備 SDK 的智能設備項目中並嘗試構建它。 編譯器和 linker 將指示您必須完成的工作。

您可能面臨的一些較大痛點是:

  • Windows CE 是 Win32 的一個子集,因此代碼有可能使用了 CE 中不可用的 API。 您必須為這些找到替代方案。
  • Windows CE 嚴重偏向 Unicode,大多數 Win32 API 在 CE 中甚至沒有 ASCII 版本。 大量桌面代碼是基於 ASCII 的。 您將不得不重新編寫所有這些代碼。 使用 TCHAR 宏有助於保持代碼向后兼容。
  • 如果代碼使用任何內聯 ASM,這可能會使生活變得困難,特別是如果您要移動到代碼不同且不支持內聯 ASM 的 ARM。
  • CE 中的 UI/GDI 內容比桌面下的限制要多得多。 UI 很難輕松移植。
  • 你在使用第三方庫嗎? 如果是這樣,他們有 CE 支持嗎,或者你能得到源代碼嗎?

還有很多其他的小“陷阱”,但在不了解您的代碼庫的情況下,很難多說。 同樣,編譯器和 linker 將首先讓您了解您還有多少工作要做。

我建議保留 win32 版本,這樣更容易開發和調試代碼。 在某些 windows ce 設備上,您可能無法在調試器中運行代碼。

如果您的應用程序是在沒有 UNICODE 的情況下編譯的,那么每次調用需要字符串的 API 函數時,您都必須將 CHAR* 字符串轉換為 WCHAR* 字符串。 如果你簡單地將你的應用程序變成 UNICODE,你會節省很多時間。否則到處使用 TCHAR。

你會發現有些代碼需要針對 Windows CE 平台的特殊版本和針對 Win32 的不同。 然后你可以使用 if-defs:

#if defined(_WIN32_WCE)
/// windows ce code version
#else
/// win32 code version
#endif

如果您想移植到 Windows CE 5.0,那么請准備好應對 memory 限制:每個進程 32MB,但實際上比您的代碼可用的要少。 您的設備實際上可以有 120+MB 或 RAM,要訪問它,您可以使用 memory 映射文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM