生成并调试 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_l、Checked::tcslwr_s 和 Checked::gcvt_s。
不再定义 _WIN32_WCE_PSPC 标志;您可以使用 _WIN32_WCE_PSPC WIN32_PLATFORM_PSPC 标志来作为变通方法。
对于 STL 应用程序的移植,请包括 <deque>,而不是 #include <deque.h>。
该 IDE 支持多种平台。当在对话框资源中承载设备项目中的 MFC 或 ATL ActiveX 对象时,应在等效的桌面 ActiveX 项目中创建并注册等效的控件。该控件可添加到资源编辑器中的设备对话框模板并正确运行。ActiveX 控件的桌面和设备版本应具有相同的 GUID 和设计时属性,如背景色。
请参见
任务
概念
参考
“<Projectname> 属性页”对话框 ->“配置属性”->“调试”(设备)