如鹏网 大学生计算机学习社区

CowNew开源团队

http://www.cownew.com 邮件请联系 about521 at 163.com

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  363 随笔 :: 2 文章 :: 808 评论 :: 0 Trackbacks
当自定义的应用程序向导生成一个项目时,则它只是不能替换自动创建的.dsp 项目设置文件。 .dsp 文件中的项目设置由假定所有生成的项目为 MFC 项目的内部规则设置。 但是,Visual C++ 5.0 的新对象模型允许修改工具设置,以便从生成的项目中删除所有依赖 MFC 的自定义 AppWizards。

Visual C++5.0 CCustomAppWiz 类现在具有名为 CustomizeProject 在虚拟重写。 CustomizeProject 提供与 IBuildProject 接口自定义向导。 IBuildProject 配置方法提供了一个的 IConfiguration 界面,用于在项目中每个生成配置。 IConfiguration 可以添加和删除如编译器提供给工具的设置。 在使用这些方法自定义向导可以删除在 MFC 上添加依存关系的设置。

示例代码

以下是示例 CustomizeProject 重写的演示 MFC 依赖项的删除:
   #import "c:\Program Files\DevStudio\SharedIDE\bin\ide\devbld.pkg"
void CNoMfcCustWizAppWiz::CustomizeProject(IBuildProject* pProject)
{
using namespace DSProjectSystem;
long lNumConfigs;
IConfigurationsPtr pConfigs;
IBuildProjectPtr pProj;
// Needed to convert IBuildProject to the DSProjectSystem namespace
pProj.Attach((DSProjectSystem::IBuildProject*)pProject, true);
pProj->get_Configurations(&pConfigs);
pConfigs->get_Count(&lNumConfigs);
//Get each individual configuration
for (long j = 1 ; j < lNumConfigs+1 ; j++)
{
_bstr_t varTool;
_bstr_t varSwitch;
IConfigurationPtr pConfig;
_variant_t varj = j;
pConfig = pConfigs->Item(varj);
// Remove Preprocessor def for MFC DLL specifier, _AFXDLL
varTool   = "cl.exe";
varSwitch = "/D \"_AFXDLL\"";
pConfig->RemoveToolSettings(varTool, varSwitch, varj);
varTool   = "rc.exe";
varSwitch = "/d \"_AFXDLL\"";
pConfig->RemoveToolSettings(varTool, varSwitch, varj);
// OPTIONAL
// Add Libs that MFC headers would have pulled in automatically
// Feel free to customize this listing to your tastes
varTool = "link.exe";
varSwitch = "kernel32.lib user32.lib gdi32.lib winspool.lib "
"comdlg32.lib advapi32.lib shell32.lib ole32.lib "
"oleaut32.lib uuid.lib odbc32.lib odbccp32.lib";
pConfig->AddToolSettings(varTool, varSwitch, varj);
}
}
本代码示例使用 Visual C++ 5.0 的新 COM 编译器支持功能的说明。 # import 语句导入,并创建 DEVBLD.PKG 类型库的所有类型的定义。 这将允许使用窗体 IInterfacePtr 的 COM 智能指针,以及新的 _ bstr _ t 和 _ variant _ t 类型代码。 这些新类型的所有自动清理使用的内存,并在超出范围时释放保持的接口指针。

此外请注意标准的自定义应用程序向导将使用预编译的头文件 StdAfx.h。 应当将放 # import # 结尾处的语句 StdAfx.h 中包含列表。

注意: DevBld.pkg 路径将不同,如果您使用 Visual C++ 版本 6.0。 假设 Visual C++ 版本 6.0 已安装到 C: 驱动器上的默认目录,# import 语句应阅读,如下所示:
   #import "C:\Program Files\Microsoft Visual Studio\Common\MsDev98\Bin\IDE\DevBld.Pkg"
注意: 上面 </a0>-# import 行必须在代码中相同的行。

请参阅有关 Visual C++ 文档。

警告

  • 请注意没有编程的方法可用于删除内部的项目将该控件设置"Microsoft 基础类"设置在常规的项目设置由包含上述代码的自定义向导生成的方式项目仍将显示"使用 MFC 共享 DLL 中"。 您可以更改此设置,唯一方法是不支持修改.dsp 项目设置文件。 但是,此设置仅用于某些 DevStudio MFC 用户界面元素如类向导和一些基于 MFC 的组件库组件。 它应该有一个非 MFC 项目没有影响。
  • 即使后修改项目设置使用 AddToolSettings 和与上面的 RemoveToolSettings,默认项目设置将仍然保持相同 Visual C++ 版本 5.0 中。 如果项目生成此自定义应用程序向导的用户打开项目设置,并单击重置,已还原的项目设置将包含已删除的 MFC 引用。 再次,防止出现这种唯一的方法是使不支持的更改生成的.dsp 项目设置文件手动自定义应用程序向导已创建项目后。

    Visual C++ 版本 6.0 提供新的自动化方法更改默认项目设置的。 配置对象支持 MakeCurrentSettingsDefault 方法。 此方法更改成为当前的设置配置的默认项目设置。
  • 当您使用 RemoveToolSettings 时,删除一次的只有一个工具设置。 在上面示例中进行另一调用 RemoveToolSettings CL.EXE 命令行而不是附加到同一个 varSwitch 语句的末尾删除定义中删除另一个的预处理器定义。 此外,请记住,工具设置的是大小写区分"/ d"和"/ D"不是相同的操作。
  • 遗憾的是,AddToolSettings、 RemoveToolSettings,和 AddCustomBuildStep (另一个 IConfiguration 方法) 运行仅在 Visual C++ 版本 5.0 在整个项目上,他们不能进行工具设置或创建自定义生成步骤单个文件。 是例如最好通常添加处理使用 MIDL 文件并生成 TLB 和其他所需的项目文件的一个项目的 IDL 文件的自定义生成步骤。 在 Developer Studio 97 对象模型不支持此。 单个文件的自定义生成步骤需要自定义应用程序向导生成项目后手动添加。

    Visual C++ 版本 6.0 对象模型不会支持若要更改的方法文件设置,并添加自定义生成步骤的文件。 请参阅 Visual C++ 版本 6.0 文档的下列方法配置对象:
    AddFileSettings
    RemoveFileSettings
    AddCustomBuildStepToFile

转载自:http://support.microsoft.com/kb/173483

大学生计算机学习社区
posted on 2009-03-08 00:00 CowNew开源团队 阅读(566) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: