将C ++代码从Win32平台更改为WinCE

时间:2012-04-07 11:17:25

标签: c++ windows windows-ce

我在C ++中有一个Win32应用程序。

我想要生成的是与WinCE兼容的此应用程序的.exe。我认为改变我的平台会更好。但是当我在智能设备平台上运行代码时,会出现很多错误!更改源代码的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

道路可能简单或非常困难。取决于源代码。很少有人在没有考虑设备的情况下编写的代码只会在没有变化的情况下工作。第一步是将所有代码导入到面向设备SDK的智能设备项目中,并尝试构建它。编译器和链接器将为您提供必须完成的工作的指示。

您可能面临的一些较大的痛点是:

  • Windows CE是Win32的子集,因此代码可能(甚至可能)使用CE中不可用的API。你必须找到那些替代品。
  • Windows CE非常偏向于Unicode,大多数Win32 API甚至在CE中都没有ASCII版本。一堆桌面代码是基于ASCII的。你必须重做所有代码。使用TCHAR宏可以帮助保持代码向后兼容。
  • 如果代码使用任何内联ASM,它可能会使生活变得困难,特别是如果您转移到代码不同且不支持内联ASM的ARM。
  • CE中的UI / GDI内容比桌面下的内容更为有限。 UI很难轻松移植。
  • 您使用的是第三方图书馆吗?如果是这样,他们是否有CE支持,或者你能获得源代码吗?

还有很多其他小的“陷阱”,但是对你的代码库一无所知,很难说更多。同样,编译器和链接器将是第一个让您了解自己有多少工作的东西。

答案 1 :(得分:1)

我建议保留win32版本,以便开发和调试代码更容易。在某些Windows设备上,您可能无法在调试器中运行代码。

如果您的应用程序是在没有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,访问它可以使用内存映射文件。