<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx</link><description>They mean two different things.</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9564856</link><pubDate>Thu, 23 Apr 2009 17:40:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9564856</guid><dc:creator>John</dc:creator><description>
&lt;p&gt;So what happens if you set both bits? &amp;nbsp;If there a check for that or would you get both old and new behavior in different areas?&lt;/p&gt;
&lt;div class="post"&gt;[&lt;i&gt;Why does it matter what happens? -Raymond&lt;/i&gt;]&lt;/div&gt;</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9564949</link><pubDate>Thu, 23 Apr 2009 18:32:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9564949</guid><dc:creator>DrkMatter</dc:creator><description>&lt;p&gt;@John&lt;/p&gt;
&lt;p&gt;Try it and see! Though this is the equivalent of asking: &amp;quot;What happens if I swallow a gallon of liquid laundry detergent?&amp;quot; Nobody knows for SURE, but anybody can tell it's a bad idea.&lt;/p&gt;
</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9565010</link><pubDate>Thu, 23 Apr 2009 19:13:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9565010</guid><dc:creator>Gabe</dc:creator><description>&lt;p&gt;It's a shame they couldn't just create a new flag called PSH_WIZARD2k for the new behavior.&lt;/p&gt;
</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9565054</link><pubDate>Thu, 23 Apr 2009 19:49:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9565054</guid><dc:creator>John</dc:creator><description>&lt;P&gt;It matters because I'm going to set both bits in all my future applications. &amp;nbsp;I hope the crash dumps find their way to you.&lt;/P&gt;
&lt;DIV class=post&gt;[&lt;I&gt;And people wonder why there's so much bad software out there. -Raymond&lt;/I&gt;]&lt;/DIV&gt;</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9565081</link><pubDate>Thu, 23 Apr 2009 20:04:20 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9565081</guid><dc:creator>Nawak</dc:creator><description>&lt;p&gt;Maybe there is something I missed, but why was Internet Explorer developped against a WIP comctl32.dll? Even if competitors could have done the same (which I doubt) why hadn't the IE team have to live with the consequence (waiting for the linked-against dll to be finished)?&lt;/p&gt;
&lt;p&gt;It seems that some lawsuits were well deserved...&lt;/p&gt;
&lt;p&gt;It is sad that it is eventually the shell team that had to pay the price, but I hope somebody took note and won't let it happen again.&lt;/p&gt;
&lt;p&gt;That being said, as Gabe said, why not manage the problem with a new wizard ID, just like MS had to do for the Wizard95-&amp;gt;Wizard97 evolution? Let the MFC and applications that were so eager to use the bugged version use it and create a new clean version that eventually every toolkit will adapt to. You would have the 95, 97-don't-use-kthx and the 2k-ooh-this-one-is-shiny versions available depending on the flag... Of course MS thought of this and still didn't choose to do that... Come on, Raymond, don't leave us hanging there, tell us why!! :)&lt;/p&gt;
</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9565090</link><pubDate>Thu, 23 Apr 2009 20:08:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9565090</guid><dc:creator>JD</dc:creator><description>&lt;p&gt;Gabe: Well they probably could have, but nobody should be developing against the incomplete buggy version anyway so why should they have? They're doing you a favor by not letting you use something that's broken.&lt;/p&gt;
</description></item><item><title>But...</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9565096</link><pubDate>Thu, 23 Apr 2009 20:10:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9565096</guid><dc:creator>Igor Levicki</dc:creator><description>&lt;p&gt;Raymond, John has a point (sort of).&lt;/p&gt;
&lt;p&gt;If you have two separate bits that share the same name for a single feature, then you can pretty much expect that people will set both.&lt;/p&gt;
&lt;p&gt;Never mind the warnings on the MSDN page, people will do it &amp;quot;to be on the safe side&amp;quot;. &lt;/p&gt;
&lt;p&gt;Heck, they might even hard-code the constant instead of using #defines and the next thing you know there will be yet another compatibility shim to write.&lt;/p&gt;
&lt;p&gt;Bonus question:&lt;/p&gt;
&lt;p&gt;What happens if you have a library compiled with #define _WIN32_IE 0x0400, an application compiled with #define _WIN32_IE 0x0500, and they need to communicate those flags?&lt;/p&gt;
</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9565205</link><pubDate>Thu, 23 Apr 2009 21:08:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9565205</guid><dc:creator>Tom</dc:creator><description>&lt;p&gt;Thanks for the info, Raymond. &amp;nbsp;I was wondering what WIZARD97 did, so I poked into the MSDN documentation and found out about the guidelines for developing a wizard. &amp;nbsp;Although I suppose that the MFC CPropertyPage class, etc. can be used in implementing a wizard, it would be nice if there were some built-in windows messages like WM_WIZNEXT and WM_WIZFINISH, and maybe some windows classes that I could use to implement a wizard &amp;quot;old-school&amp;quot; style (i.e. using C instead of MCF/C++).&lt;/p&gt;
</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9565208</link><pubDate>Thu, 23 Apr 2009 21:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9565208</guid><dc:creator>Tom</dc:creator><description>&lt;P&gt;Yeah...about that messages and windows classes. &amp;nbsp;Nevermind. &amp;nbsp;I spoke too soon.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/bb774544.aspx" target=_new rel=nofollow&gt;http://msdn.microsoft.com/en-us/library/bb774544.aspx&lt;/A&gt;&lt;/P&gt;</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9565414</link><pubDate>Thu, 23 Apr 2009 23:17:09 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9565414</guid><dc:creator>ERock</dc:creator><description>&lt;p&gt;I propose all bits are changed to trinary to prevent this. Ok, Microsoft, FUND IT. :)&lt;/p&gt;
</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9565431</link><pubDate>Thu, 23 Apr 2009 23:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9565431</guid><dc:creator>Nathaniel</dc:creator><description>&lt;p&gt;So... I didn't see an article on this on Slashdot, so either the message is preemptive or my search-fu has gone downhill...&lt;/p&gt;
</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9565605</link><pubDate>Fri, 24 Apr 2009 01:26:47 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9565605</guid><dc:creator>Yuhong Bao</dc:creator><description>&lt;p&gt;By Windows 2000 do you mean IE 5? Because when you are talking about the shell, you seems to sometimes say Win98 when you really mean IE 4, I can tell because I know that the version of the shell shipped with Win98 is the same as the version shipped with the IE 4 desktop update for Win95.&lt;/p&gt;
</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9565707</link><pubDate>Fri, 24 Apr 2009 02:48:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9565707</guid><dc:creator>Maurits</dc:creator><description>&lt;p&gt;In hindsight, the obvious solution is to put the flag into a private, internal header and not move it to a public header until the feature is ready to ship.&lt;/p&gt;
</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9565918</link><pubDate>Fri, 24 Apr 2009 05:26:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9565918</guid><dc:creator>Miral</dc:creator><description>&lt;P&gt;No, in hindsight Nawak was right. &amp;nbsp;Either IE4 shouldn't have started using the control library until it was finished (properly) or they should have waited for development on it to be complete instead of shipping a half-baked version. &amp;nbsp;If they didn't want to wait, then they should have removed the code that used it.&lt;/P&gt;
&lt;P&gt;You can't ship a product until all of its dependencies are shippable. &amp;nbsp;That's just the basic rules.&lt;/P&gt;
&lt;DIV class=post&gt;[&lt;I&gt;IE4 didn't use Wizard97. -Raymond&lt;/I&gt;]&lt;/DIV&gt;</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9565920</link><pubDate>Fri, 24 Apr 2009 05:28:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9565920</guid><dc:creator>Miral</dc:creator><description>&lt;p&gt;... and if Wizard97 did end up being considered complete enough to ship, then the followup to it should have been Wizard2000 or Wizard97 v2 (with a version field or API call instead of a flag), so that apps could consciously make the decision about which one they wanted to use.&lt;/p&gt;
</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9566113</link><pubDate>Fri, 24 Apr 2009 08:37:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9566113</guid><dc:creator>Drak</dc:creator><description>&lt;p&gt;It's all nice to say 'they should have done it better', but this sort of stuff just happens, and I think Microsoft dealt with it in a reasonable way.&lt;/p&gt;
&lt;p&gt;And about setting both flags: if you use the .h file, and the nicely defined constants, how would you go about setting both. It's not gonna happen unless you go out and define your own constants (which is a bad idea anyway).&lt;/p&gt;
</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9566471</link><pubDate>Fri, 24 Apr 2009 13:24:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9566471</guid><dc:creator>Medinoc</dc:creator><description>&lt;p&gt;How did the IE4 Wizard97 style look like?&lt;/p&gt;
</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9566555</link><pubDate>Fri, 24 Apr 2009 14:39:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9566555</guid><dc:creator>Mike Dimmick</dc:creator><description>&lt;p&gt;It *wasn't* complete enough to ship, but was in the source code for comctl32.dll, including all other changes in prsht.h. This was before Microsoft had a strong branching/merging source control solution for the Windows source code, so work in progress was all in the same tree (this was sorted out for Windows XP). IE4 shipped a new comctl32.dll - which had always housed the property sheet and wizard code - with various other new controls and new features, so the half-finished solution was shipped.&lt;/p&gt;
&lt;p&gt;The documentation said 'don't use it', but unfortunately the header didn't.&lt;/p&gt;
&lt;p&gt;Changing the value of the define is a little dodgy, as a release built with the new SDK will pick up the new flag; a patch release might not get complete coverage testing, although you shouldn't change your SDK when building maintenance releases anyway.&lt;/p&gt;
</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9566571</link><pubDate>Fri, 24 Apr 2009 14:55:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9566571</guid><dc:creator>Anonymous Coward</dc:creator><description>
&lt;p&gt;Obviously, since IE didn't use Wizard 97, it didn't need the flag. In fact, since Wizard 97 wasn't ready, no one except the Wizard 97 development team needed the flag and therefore it shouldn't have been in any publicly (as in outside of the team) shipped header files. And of course, there's something to be said for the "we didn't cause this, not our problem" approach. Although I imagine that that would be kind of impossible if the problem is in MFC. I thought this was an interesting read, since it was a preventable problem and reading about these things can help prevent similar mistakes in the future.&lt;/p&gt;
&lt;div class="post"&gt;[&lt;i&gt;The Wizard97 team expected to be finished in time, so they put the flags in the public header file. By the time they realized that they weren't going to make it, the header files had already been frozen. I think people don't understand how methodical the release process is (and how long it takes). -Raymond&lt;/i&gt;]&lt;/div&gt;</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9566750</link><pubDate>Fri, 24 Apr 2009 17:06:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9566750</guid><dc:creator>DysgraphicProgrammer</dc:creator><description>
&lt;p&gt;OK, if IE4 didn't need it, why not #ifdef out it's entire existence? Make the offending functions not callable, and not linkable? Or if you can't do that for some DLL compatibility reason make the functions crash the whole program noisily if called. That way if any one tried to use them, they would not get past debugging. &amp;nbsp; &lt;/p&gt;
&lt;div class="post"&gt;[&lt;i&gt;That's a big code change to make just days before RTM. It would almost certainly &lt;a href="http://blogs.msdn.com/release_team/archive/2005/08/26/456610.aspx"&gt;reset escrow&lt;/a&gt;. -Raymond&lt;/i&gt;]&lt;/div&gt;</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9566854</link><pubDate>Fri, 24 Apr 2009 18:16:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9566854</guid><dc:creator>CGomez</dc:creator><description>&lt;p&gt;This is an awesome story about how real world software teams have to deal with concurrent development.&lt;/p&gt;
&lt;p&gt;You can't have developers sitting on their hands waiting for another part of the team to finish something. &amp;nbsp;And that is a smaller example of what a large software corporation that works on many products has to deal with.&lt;/p&gt;
&lt;p&gt;Very good lesson to be learned here. &amp;nbsp;The idiot says, &amp;quot;Just don't use something half finished.&amp;quot; &amp;nbsp;The realist nods and recalls a situation where his own team had to use new features that would work for the instant case but might not work in all cases.&lt;/p&gt;
&lt;p&gt;This is truly one of the best stories I've ever read on this blog. &amp;nbsp;An instant classic.&lt;/p&gt;
</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9569432</link><pubDate>Sun, 26 Apr 2009 19:26:24 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9569432</guid><dc:creator>katastrofa</dc:creator><description>&lt;p&gt;Raymond: &amp;quot;The Wizard97 team expected to be finished in time, so they put the flags in the public header file. By the time they realized that they weren't going to make it, the header files had already been frozen. I think people don't understand how methodical the release process is (and how long it takes).&amp;quot;&lt;/p&gt;
&lt;p&gt;Well it isn't very methodological if it allows half-finished features to slip through to final &amp;quot;frozen&amp;quot; release.&lt;/p&gt;
&lt;p&gt;Oh, and why did Microsoft start to use source control with branching so late?&lt;/p&gt;
</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9570055</link><pubDate>Mon, 27 Apr 2009 04:23:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9570055</guid><dc:creator>old-new-skool</dc:creator><description>&lt;p&gt;very nice tale... &amp;nbsp;It made me recall my desire to denounce all things C in the late 80's/early 90's -- not sure why... &amp;nbsp; :)&lt;/p&gt;
&lt;p&gt;c'mon naysayers... what OS/Software Suite the size (and mass) of the world have you deployed or written lately, and how did you make it perfect with a Marketing department ultimately pulling the strings? &amp;nbsp;:D&lt;/p&gt;
</description></item><item><title>re: Why are there two values for PSH_WIZARD97?</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9572780</link><pubDate>Tue, 28 Apr 2009 05:28:54 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9572780</guid><dc:creator>Kevin Provance</dc:creator><description>&lt;p&gt;But...time travel is possible.&lt;/p&gt;
&lt;p&gt;www.chronos.ws&lt;/p&gt;
&lt;p&gt;Who do you think I will be working for 20 years from now? &amp;nbsp;&amp;lt;g&amp;gt;&lt;/p&gt;
</description></item><item><title>A Developer’s Guide to Preparing for Windows 7</title><link>http://blogs.msdn.com/oldnewthing/archive/2009/04/23/9564015.aspx#9592511</link><pubDate>Thu, 07 May 2009 04:13:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9592511</guid><dc:creator>Tim Sneath</dc:creator><description>&lt;p&gt;As everyone must know by now, the Windows 7 Release Candidate is broadly released and available for download&lt;/p&gt;
</description></item></channel></rss>