65.9K
CodeProject 正在变化。 阅读更多。
Home

嵌入式 Visual C++ 的项目向导

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (3投票s)

2006年8月28日

CPOL

6分钟阅读

viewsIcon

49408

一篇关于为嵌入式 Visual C++ 创建项目向导的文章。

引言

Embedded Visual C++ (EVC) 已经存在一段时间了(它支持从 Windows CE 2.11 到 Windows Mobile 2003)。它是一个非常强大的 IDE,与早期版本的 VC++ 类似,但最吸引人的方面是它的价格——这是 Microsoft 提供的免费下载!

与大多数开发环境一样,它最终被更近期的 Visual Studio 2003/2005 IDE 所取代。但是,对于大多数共享软件开发者来说,购买 Visual Studio 2005 标准版是不可能的,而且由于 Visual Studio 的 Express 版本不支持移动开发,因此在 Windows Mobile 平台上进行开发的选择非常有限,除非您坚持使用旧技术。在大多数情况下,这还可以,但缺乏支持最终会开始显现。

本文讨论了如何发现过时技术的工作原理以及一个简单的变通解决方案。

背景

最近,在为一个 EVC 3.0 项目编写支持 Windows Mobile 5 平台的代码时,我担心我可能不得不对以后编写的每个新项目进行这些更改。显然,对于项目向导来说,这是理想情况,可以通过几个简单的点击,从代码模板创建标准化项目。

当谈到向导时,我指的是通常在 IDE 中启动新项目时,在“项目”选项卡下找到的项目向导。

由于对项目向导的创建一无所知,我开始探索如何创建自己的向导。

那么,向导有什么内容?

我的第一站显然是 Google。经过几次徒劳的搜索后,我决定采取不同的方法。

我接下来尝试的是在我的硬盘上对“Hello World”这个词进行简单的文本搜索,因为大多数 Pocket PC 应用程序向导都会创建一个简单的 Hello World 类型应用程序。搜索最终将我引向位于 (C:\Program Files\Microsoft eMbedded Tools\Common\EVC\Bin\IDE) 下的许多文件,这些文件的扩展名为 AWX。在各个 SDK 下也找到了更多这些文件,例如 C:\Windows CE Tools\wce300\MS Pocket PC\Wizards(例如,针对原始 Pocket PC 平台)。

在文本编辑器中快速查看文件后,我发现这些文件本质上是二进制的——因此无法直接在文本编辑器中进行编辑以满足我的需求。

在十六进制编辑器中查看文件时,我注意到向导生成的代码实际上在文件中可见,并且可以进行编辑以适应需求,但批量更改将是困难且繁琐的。

最后,获得了另一个线索(AWX 文件扩展名),我在 Google 上进行了另一次搜索。这次我找到了以下关于为 Visual C++ 创建向导的晦涩文章(来自 1997 年);

http://www.microsoft.com/msj/0397/appwizard/appwizard.aspx

阅读这篇深度文章会发现,项目向导的正确术语是 AppWizard。一个有趣的事实是,AppWizard 文件实际上只是带有 AWX 扩展名的特殊 MFC DLL 文件。要生成它们,您需要使用一个向导来创建一个特殊的项目,该项目(编译后)将成为一个新的向导。这一切都在 Visual C++ 中完成。

那么如何为 EVC 创建向导呢?嗯,有趣的是,在第二个 EVC 光盘上有一个创建新向导的向导(以及所需的 lib 和头文件)。该向导仅在 Visual Studio(即 VC++)中运行,因为它会生成一个 x86 DLL,然后该 DLL 从 EVC IDE 运行。

再次在 Google 上搜索,这次搜索 Pocket PC 上的 AppWizards,我找到的与此向导相关的唯一文档是在 MSDN 上的一些 EVC 4.0 的预发布文档中;

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vcce4/html/evoriCreatingCustomWCEAppWizards.asp

想法是您将头文件 (customaw.h) 和 lib 文件 (mfcapwz.lib) 添加到您的 VC++ 环境中。我相信这些文件与环境中已有的副本在某些方面是不同的(这些文件已在我的 VC++ 6 安装中提供)。最后,您需要复制 Windows CE 向导本身,该文件名为“cecustmwz.awx”或“cecust~1.awx”(是的,这是正确的名称)到您的 IDE(我将我的放在 C:\Program Files\Microsoft Visual Studio\COMMON\MSDev98\Bin\IDE 下)。AWX 文件名并不重要。

当您的 VC++ IDE 重新启动后,会出现一个名为“CE Custom AppWizard”的新向导。按照向导提示,它允许您创建一个 VC++ 项目,您可以将其构建成一个可以在 EVC 中使用的新向导。

显然,AWX 格式还有更多内容,例如 $$root$$ 宏值(它是 IDE 输入的项目名称的占位符),但这类文档几乎不存在(尽管 MSDN 文章确实涵盖了一些内容)。

但是,使用标准方法生成一个简单的向导是很容易的,前提是您可以访问 VC6!

那么,如果您无法访问 VC6 会怎么样?

替代方法

如果您回想一下本文前面提到的,AWX 文件实际上是 MFC DLL 文件。“DLL”中的“魔力”实际上是一种名为“TEMPLATE”的资源类型。模板类型包含模板中使用的所有原始代码(即任何 cpp、h、资源文件等)。可以使用任何资源编辑器来编辑或替换这些资源。

我将不会详细介绍如何使用资源编辑器,因为大多数开发人员已经熟悉它了。基本上,资源编辑器可用于交换、提取、编辑或删除已编译 DLL 或 EXE 中的资源。我最喜欢的资源编辑器是 ResHacker (Resource Hacker),这是一个很棒的免费软件产品。尽管它自 2002 年以来没有更新过,但它是一个很棒的应用程序,我认为它是一个必不可少的开发人员工具。

使用 ResHacker,可以轻松地将新代码直接注入现有向导,而无需编写自己的向导。如果只需要稍微修改现有向导,这是一个快速解决方案。

如果您想要现有向导的一个变体(并保留原始向导),您可以复制一个现有向导(只需在 Explorer 中复制文件),然后在 ResHacker 中按需修改代码。EVC IDE 实际上会加载第二个 DLL,但描述将与原始 DLL 相同。解决方法是编辑“版本信息”资源下的“ProductName”属性(见下图)。

关注点

根据这篇文章 (http://www.codeguru.com/cpp/v-s/devstudio_macros/customappwizards/article.php/c9647),这些 IDE 的 Visual Studio 2003/2005 向导是使用 DHTML 和 JavaScript 创建的。希望这意味着当这些技术在未来过时时,整个过程会更加透明。

出于兴趣,我确实尝试在 Visual Studio 2003 中编译项目向导的代码,但在尝试运行向导时,它导致 EVC 崩溃。

删除、移动或更改 AWX 文件的扩展名是清理 IDE 中显示的项目向导数量的简单方法。例如,我更喜欢使用 WIN32 而不是 MFC,所以我移动了 MFC 向导,以便 IDE 检测不到它们(见下图)。

适用于 Embedded Visual C++ 的项目向导 - CodeProject - 代码之家
© . All rights reserved.