生成并调试 Visual C++ 设备项目

更新:2007 年 11 月

生成并调试设备项目与生成并调试桌面项目略有不同。

以下是生成和调试技术的列表:

  • 默认情况下,设备项目的线程模型为自由线程模型。但是,如果在生成 CE OS 映像时未选择 DCOM 选项,则 Windows CE 不完全支持 COM 封送处理和关联的定义。因此,在某些 CE 平台上,编译器可能会生成有关 DCOM 支持和单线程与多线程定义的警告。该警告建议您在自己的代码中处理线程和同步。例如,在编译 ATL 设备项目时,编译器可能会发出有关定义 _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA 的警告。在某些情形下,如在 Windows Mobile 平台上创建 COM 对象、使用 Web 服务以及 ATL COM 对象时,也会发生这种情况。您可以按如下所示,在主头文件中为单线程对象定义此标志:#define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA。如果您的代码正在进行多线程处理,您可以放心地忽略该警告。有关 Windows CE 上的 COM、DCOM 和线程模型的更多信息,请参见 Windows CE 5.0 文档中的 COM 线程和进程以及组件服务(COM 和 DCOM)。

  • 默认情况下,本机设备应用程序是使用静态链接创建的。如果决定切换到动态链接,则可以将以下运行时 DLL 添加到“附加文件”项目属性:

    • MFC 应用程序发布版本配置

      将以下运行时 DLL 添加到“附加文件”项目属性:msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;MFC80U.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;

    • MFC 应用程序调试版本配置

      将以下运行时 DLL 添加到“附加文件”项目属性:msvcr80d.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;MFC80Ud.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;

    • ATL 应用程序发布版本配置

      将以下运行时 DLL 添加到“附加文件”项目属性:msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;

    • ATL 应用程序调试版本配置

      将以下运行时 DLL 添加到“附加文件”项目属性:msvcr80d.dll|$(BINDIR)\$(INSTRUCTIONSET)\%CSIDL_PROGRAM_FILES%\<projectname>|0;msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\%CSIDL_PROGRAM_FILES%\<projectname>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\%CSIDL_PROGRAM_FILES%\<projectname>|0;

      有关 Windows CE DLL 加载的更多信息,请参见 Windows CE DLL 加载 LoadLibrary

      说明:

      同时从不同的目录加载多个同名 DLL(例如 \Windows\aDLL.dll 和 \Program Files\aDLL.dll)可能导致不可预知的结果。建议您一次加载一个 DLL 副本或应调用第一个加载的 DLL。

以下是一些其他注意事项:

  • 移植到 MFC 8.0 # 时,请定义 _WIN32_WCE_PSPC。默认情况下,MFC8.0 中未定义此标志。

  • 在“为结构编译”下拉列表中以 Pocket PC 2003 或 Smartphone 2003 为目标时,不支持“ARM4T”选项。若要在“<项目名称> 属性页”对话框中找到此列表,请依次单击“配置属性”、“C/C++”和“高级”,然后选择“为结构编译”。

  • GAPI 函数在 C++ 中可用,但在 C 中不可用。将 gx.h 包含在代码中的做法只有在 C++ 中才会起作用。如果您在代码中使用 GAPI,请勿使用 /TC 编译器选项编译。

  • 在用于设备的 MFC 8.0 中,您控制 CommandBar 的创建和插入。不再支持 CDialog::m_pWndEmptyCB 成员。此成员用来指向为对话框创建的空 CCommandBar 类(在 Pocket PC 上也称为 MenuBar),可以引用它来插入您自己的 MenuBar

  • 对于使用 Windows CE 的平台,系统提供了 Checked::_strlwr_s_strlwr_s_l_mbslwr_s, _mbslwr_s_l_wcslwr_s_wcslwr_s_lChecked::tcslwr_sChecked::gcvt_s

  • 不再定义 _WIN32_WCE_PSPC 标志;您可以使用 _WIN32_WCE_PSPC WIN32_PLATFORM_PSPC 标志来作为变通方法。

  • 对于 STL 应用程序的移植,请包括 <deque>,而不是 #include <deque.h>。

  • 该 IDE 支持多种平台。当在对话框资源中承载设备项目中的 MFC 或 ATL ActiveX 对象时,应在等效的桌面 ActiveX 项目中创建并注册等效的控件。该控件可添加到资源编辑器中的设备对话框模板并正确运行。ActiveX 控件的桌面和设备版本应具有相同的 GUID 和设计时属性,如背景色。

请参见

任务

如何:在 Visual C++ 项目中提供设备

概念

Visual C++ 设备项目的调试和部署设置

Visual C++ 设备项目的调试和部署设置

参考

“<Projectname> 属性页”对话框 ->“配置属性”->“调试”(设备)

其他资源

调试设备项目

创建并移植 Visual C++ 设备项目

开发 Visual C++ 设备项目