FIX: Custom AppWizard May Ignore Changes to Predefined MacrosLast reviewed: February 20, 1998Article ID: Q181511 |
The information in this article applies to:
SYMPTOMSIn a Custom AppWizard based on standard AppWizard steps, the wizard framework may ignore changes that custom steps make to predefined wizard macros. The standard AppWizard steps define and use such predefined macros; for example, the macro VERBOSE conditionally generates elaborate comments in the destination project's source files.
CAUSEA custom AppWizard's custom step usually makes changes to the macro table stored in m_Dictionary during OnDismiss, a function called when the user exits the page. However, clicking the Custom AppWizard's Finish button also sets the values of predefined macros, based on internal values stored by the standard AppWizard steps. If a custom step changes a macro that a standard step controls, the internal value stored by the standard step is unaffected. So, when Finish sets the predefined macros, such changes made by custom steps are effectively ignored.
RESOLUTIONInstead of modifying predefined macros in OnDismiss, override the virtual function CCustomAppWiz::ProcessTemplate. Alternatively, preset the macro's value in Init. These techniques also work in Visual C++ version 5, even though the bug is fixed in this version.
STATUSMicrosoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug has been corrected in the AppWizard included with Visual C++, 32-bit editions, version 5.0.
MORE INFORMATIONThe macros referred to in this article are the symbols that AppWizard reads from the m_Dictionary table. The AppWizard replaces occurrences of these symbols in source template files with the text value associated with them, or it tests them for existence. This article does NOT refer to VBScript macro commands. There are two types of macros that a Custom AppWizard can use:
The Custom AppWizard may set or remove a macro in Init to modify the standard AppWizard default, so the user can choose to change it back in the standard step.
Sample Code
void CTestWizAppWiz::ProcessTemplate( LPCTSTR lpszInput, DWORD dwSize, OutputStream* pOutput ) { // The framework calls ProcessTemplate repeatedly, // but the macro needs to be modified only once. static BOOL bRemovedMacro = FALSE; if ( !bRemovedMacro ) { TestWizaw.m_Dictionary.RemoveKey("VERBOSE"); bRemovedMacro = TRUE; } CCustomAppWiz::ProcessTemplate( lpszInput, dwSize, pOutput ); } |
Additional query words: kbdsstools
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |