更改C++;从Win32平台到WinCE的代码 我在C++中有Win32应用程序。 我想为这个应用程序生成一个与WinCE兼容的.exe。我觉得换个平台比较好。但是当我在智能设备平台上运行代码时,有很多错误!更改源代码的最佳方法是什么 这条路可能很简单,也可能很难走。取决于源代码。很少有代码在一开始没有考虑到设备的情况下就可以不经修改地工作。第一步是将所有代码导入到针对您的设备SDK的智能设备项目中,并尝试构建它。编译器和链接器将为您指明必须完成的工作

更改C++;从Win32平台到WinCE的代码 我在C++中有Win32应用程序。 我想为这个应用程序生成一个与WinCE兼容的.exe。我觉得换个平台比较好。但是当我在智能设备平台上运行代码时,有很多错误!更改源代码的最佳方法是什么 这条路可能很简单,也可能很难走。取决于源代码。很少有代码在一开始没有考虑到设备的情况下就可以不经修改地工作。第一步是将所有代码导入到针对您的设备SDK的智能设备项目中,并尝试构建它。编译器和链接器将为您指明必须完成的工作,c++,windows,windows-ce,C++,Windows,Windows Ce,您可能面临的一些更大的痛点包括: Windows CE是Win32的一个子集,因此代码可能使用CE中不可用的API。你必须为这些找到替代品 Windows CE非常偏向Unicode,大多数Win32 API在CE中甚至没有ASCII版本。加载的桌面代码是基于ASCII的。你必须重做所有的代码。使用TCHAR宏有助于保持代码向后兼容 如果代码使用任何内联ASM,这可能会给您的生活带来困难,特别是如果您正在迁移到ARM,而代码不同,并且不支持内联ASM CE中的UI/GDI比桌面下的UI/GDI

您可能面临的一些更大的痛点包括:

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

还有很多其他的小“陷阱”,但在不了解任何代码基础的情况下,很难说得更多。同样,编译器和链接器将是第一件让你知道你还有多少工作要做的事情。

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

您可能面临的一些更大的痛点包括:

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

还有很多其他的小“陷阱”,但在不了解任何代码基础的情况下,很难说得更多。同样,编译器和链接器将是第一件让您知道您还有多少工作要做的事情。

我建议将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

如果您想移植到WindowsCE5.0,那么就要准备好内存限制:每个进程32MB,但实际上小于代码可用的内存限制。您的设备实际上可以有120+MB或RAM,要访问它,您可以使用内存映射文件。

我建议将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
如果您想移植到WindowsCE5.0,那么就要准备好内存限制:每个进程32MB,但实际上小于代码可用的内存限制。您的设备实际上可以有120+MB或RAM,要访问它,您可以使用内存映射文件