0

I have a Win32 application in C++.

What I want to produce is an .exe for this application compatible with WinCE. I thought it is better to change my platform. But when I run the code in smart device platform, there are many errors! What is the best way to change the source code?

4

2 回答 2

2

这条路可能很简单,也可能很困难。取决于源代码。一开始就没有考虑设备而编写的代码很少能在不改变的情况下工作。第一步是将所有代码导入针对您的设备 SDK 的智能设备项目并尝试构建它。编译器和链接器将指示您必须完成的工作。

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

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

还有很多其他的小“陷阱”,但是在不了解您的代码库的情况下,很难说更多。同样,编译器和链接器将首先让您了解您还有多少工作要做。

于 2012-04-07T16:44:28.733 回答
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,要访问它,您可以使用内存映射文件。

于 2012-04-09T22:03:29.380 回答