2012-04-07 64 views
0

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

我想製作的是一個與WinCE兼容的應用程序.exe。我認爲最好改變我的平臺。但是當我在智能設備平臺上運行代碼時,出現很多錯誤!什麼是改變源代碼的最佳方式?將C++代碼從Win32平臺更改爲WinCE

回答

2

道路可能很簡單,也可能很困難。取決於源代碼。很少有代碼在沒有設備思想的情況下編寫代碼就會毫無改變地工作。第一步是將所有代碼導入以設備SDK爲目標的智能設備項目並嘗試構建它。編譯器和鏈接器會給你一個你必須做的工作的指示。

一些你可能會面臨更大的痛點是:

  • Windows CE是Win32的一個子集,因此這是可能的,甚至有可能,該代碼使用CE沒有可用的API。你必須爲這些尋找替代品。
  • Windows CE非常偏向於Unicode,大多數Win32 API在CE中甚至沒有ASCII版本。桌面代碼的加載是基於ASCII的。你必須重做所有的代碼。使用TCHAR宏可以幫助保持代碼向後兼容。
  • 如果代碼使用任何內聯ASM,它可能會使生活困難,特別是如果您要移動到代碼不同並且不支持內聯ASM的ARM。
  • CE中的UI/GDI東西實質上比桌面下更有限。用戶界面可能很難輕鬆移植。
  • 你在使用第三方庫嗎?如果是這樣,他們是否有CE支持,或者你能得到源代碼?

還有很多其他小小的「陷阱」,但不知道任何關於代碼庫的知識,很難多說。再一次,編譯器和鏈接器將首先讓你知道你在你之前做了多少工作。

1

我會建議保持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中則可以針對內存的限制,準備:每個進程32MB,但實際上不到這是提供給您的代碼。您的設備實際上可以有120 + MB或RAM,要訪問它,您可以使用內存映射文件。