<?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>In theory, there is no difference between theory and practice. But, in practice, there is.</title><link>http://blogs.msdn.com/oleglv/default.aspx</link><description>&lt;I&gt;"Simple, clear purpose and principles give rise to complex intelligent behavior. Complex rules and regulations give rise to simple stupid behavior."&lt;/I&gt;
   -- Dee Hock
&lt;/I&gt;</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>This blog is moving...</title><link>http://blogs.msdn.com/oleglv/archive/2004/01/06/56145.aspx</link><pubDate>Tue, 06 Jan 2004 11:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:56145</guid><dc:creator>oleglv</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/oleglv/comments/56145.aspx</comments><wfw:commentRss>http://blogs.msdn.com/oleglv/commentrss.aspx?PostID=56145</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;p class="MsoNormal" style="MARGIN: 5pt 0in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Yup, as you all may know by now,
        blogs.gotdotnet.com will go into the deep freeze very soon, so all new posts (there
        will be new posts, I promise) will be available at &lt;a href="http://weblogs.asp.net/oleglV"&gt;http://weblogs.asp.net/olegl&lt;b style="mso-bidi-font-weight: normal"&gt;V&lt;/b&gt;&lt;/a&gt;&lt;?xml:namespace prefix = o ns = 
"urn:schemas-microsoft-com:office:office" /&gt;
        &lt;o:p&gt;&lt;/o:p&gt;
        &lt;/span&gt;
    &lt;/p&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=56145" width="1" height="1"&gt;</description></item><item><title>Bad, bad...</title><link>http://blogs.msdn.com/oleglv/archive/2004/01/06/56144.aspx</link><pubDate>Tue, 06 Jan 2004 11:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:56144</guid><dc:creator>oleglv</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/oleglv/comments/56144.aspx</comments><wfw:commentRss>http://blogs.msdn.com/oleglv/commentrss.aspx?PostID=56144</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;p class="MsoNormal" style="MARGIN: 5pt 0in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Yes, I admit it - I have been bad.
        I haven't posted in quite a while - although I do have quite a few ideas for the new
        posts. Not to get into the lame details, but lots of things have been going on in
        just about every area of my life which kept me quite thoroughly occupied. Some of
        those have been work-related and I actually have more material to post now...&lt;br /&gt;
        Anyhow, things appear to be mostly improving and I expect to start posting in the
        nearest future...&lt;o:p&gt;&lt;/o:p&gt;
        just as soon as I manage to defrost ( it has been pretty cold down here... )&lt;/span&gt;
    &lt;/p&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=56144" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/oleglv/archive/tags/General/default.aspx">General</category></item><item><title>CLR eye for C# guy : On proverbial trees and custom attributes</title><link>http://blogs.msdn.com/oleglv/archive/2003/12/12/486360.aspx</link><pubDate>Fri, 12 Dec 2003 23:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:486360</guid><dc:creator>oleglv</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/oleglv/comments/486360.aspx</comments><wfw:commentRss>http://blogs.msdn.com/oleglv/commentrss.aspx?PostID=486360</wfw:commentRss><description>&lt;DIV class=news_header&gt;
&lt;H1&gt;&amp;nbsp;&lt;/H1&gt;&lt;/DIV&gt;
&lt;DIV class=news_description&gt;
&lt;DIV class=entryBody&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;So... if a tree falls in the forest, and no one is there to hear it, does it make a sound? Very new and original question, eh? Do I know the answer? Does anyone? Does this have anything to do with custom attributes? You'd be surprised to know that yes, in fact it does. But fortunately - as far as attributes are concerned - I do know the answer. Sort of.&lt;?XML:NAMESPACE PREFIX = O /&gt;&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;This entry was supposed to be introductory. In fact, I wanted it to be very short and neat, just to start off with something simple. Well, as I started to review my notes, I realized that I will have no such luck. &lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;As we know, attributes - more specifically custom attributes - are an extensibility mechanism which makes it possible to add bits of custom metadata in a non-intrusive way. This metadata is stored is a special metadata table which can then be looked at by various tools via Reflection or Metadata API. Attributes are extensively used by compilers, validation tools, execution environments, and parts of CLR execution engine - for instance Remoting and Interop subsystems. They are great, because they don't get in your way if you don't want them to and right there if you are interested. &lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;So... let's have a closer look and see what exactly happens when write something like this: &lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[AttributeUsage( AttributeTargets.Class )] &lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; ClassDescriptionAttribute : Attribute&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; ClassDescriptionAttribute( &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; description, &lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt; localizable&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;) {...}&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; Description {...}&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt; Localizable {...} &lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; ResourceID {...}&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;[ClassDescription("Class Foo", &lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;, ResourceID = "id1") ]&lt;O:P&gt;&lt;/O:P&gt; &lt;/B&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[Serializable]&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; Foo&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;As you can see, everything looks pretty straight-forward. There is a custom attribute called "ClassDescriptionAttribute" (I have omitted method bodies and private members because they are pretty standard - primitive getters and setters ); and a class, which I have inventively called "Foo" that has two attributes associated with it - the custom one we have declared, and the standard system attribute "Serializable", which is commonly used by Remoting subsystem. The semantics of what's going on are pretty clear as well - we want class Foo to have a localizable description with resourceID="id1". Something in our application will then extract this information and use it accordingly - the typical use would be to display it together with the other class information.&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Let's compile this thing, ILDASM it and see what declaration of Foo looks like in IL.&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Tahoma"&gt;.class public auto ansi &lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Tahoma"&gt;serializable&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt; Foo &lt;SPAN style="COLOR: blue"&gt;extends&lt;/SPAN&gt; [mscorlib]System.Object&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;.custom instance void&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt; Attribs.ClassDescriptionAttribute :: &lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="COLOR: red"&gt;.ctor &lt;/SPAN&gt;&lt;/B&gt;(string, bool) = &lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;( 01 00 09 43 6C 61 73 73 20 46 6F 6F 01 01 00 54 0E 0A 52 65 73 6F 75 72 63 65 49 44 03 69 64 31 ) &lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Tahoma"&gt;// ...Class Foo...T..ResourceID.id1&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt; &lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;...&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Huh, so this is interesting. There are several puzzling things there, which we will try to figure out one by one.&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-fareast-font-family: Tahoma"&gt;&lt;SPAN style="mso-list: Ignore"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; tab-stops: list .25in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-fareast-font-family: Tahoma"&gt;1.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-fareast-font-family: Tahoma"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Where did "Serializable" go? &lt;I style="mso-bidi-font-style: normal"&gt;On pseudo-attributes&lt;/I&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt; &lt;BR&gt;Very good question. If you look closer, you will see some very explicit signs of presence of our freshly-defined custom attribute, but [Serializable] is not there. Well, turns out, that's because SerializableAttribute is what they called "pseudo-attribute", which means that it's not a "real" attribute, but something the C# compiler recognizes and translates into a class flag "serializable". Make no mistake, there is actually a class called "SerializableAttribute" that is defined in mscorlib.dll - it's just that it never gets emitted by the compiler as such. &lt;BR&gt;The reason for this is pretty obvious -extraction of custom attributes is rather expensive, so CLR execution engine tries to avoid doing that as much as possible. Having "serializable" as a class flag as opposed to a "real" custom attribute, significantly improves performance of the Remoting subsystem. &lt;BR&gt;There are other pseudo-attributes, full list of which you can find &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemreflectionassemblyclassgetcustomattributestopic2.asp"&gt;&lt;FONT color=#000000&gt;here&lt;/FONT&gt;&lt;/A&gt;. There are two main things to remember about pseudo-attributes&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; tab-stops: list .75in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;·&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-fareast-font-family: Symbol"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;They are very special and mostly intended for CLR use - as you see there're only a handful of them, and adding new ones would require CLR metadata specification change&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; tab-stops: list .75in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;·&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-fareast-font-family: Symbol"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;They can &lt;B style="mso-bidi-font-weight: normal"&gt;not&lt;/B&gt; be extracted using Type.GetCustomAttributes(), instead they need to be accessed via appropriate metadata item properties or Metadata API&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; tab-stops: list .25in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-fareast-font-family: Tahoma"&gt;2.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-fareast-font-family: Tahoma"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;What's that ".ctor" business? &lt;I style="mso-bidi-font-style: normal"&gt;What custom attributes really are&lt;/I&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;As you can see, &lt;SPAN style="COLOR: blue"&gt;.custom&lt;/SPAN&gt; statement - you can probably guess that it used to declare custom attributes in IL - mentions ClassDescriptionAttribute in rather peculiar way - it seems that it is trying to "call" something called ".ctor". Why is that? As you may guess, ".ctor" means "constructor"(incidentally, ".cctor" means "static constructor"). Intuitively, this makes sense, as an attribute class can have more than one constructor, so we have to be specific as to which one we want "called".&lt;BR&gt;Things get a little clearer if you consider how constructors are represented in CLR Metadata tables. You see, all constructors are stored together with other methods in MethodDef/MethodRef tables, and while certain flags do indicate quite clearly that this particular method is in fact a constructor, these are the only two tables that contain information about them.&lt;BR&gt;Another Metadata table that is of interest to us is called CustomAttribute. This one - as you may have guessed - describes custom attributes.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This particular table has 3 fields - Parent, Type and Value. &lt;B style="mso-bidi-font-weight: normal"&gt;Parent&lt;/B&gt; is something that the attribute is defined on (assembly, class etc); &lt;B style="mso-bidi-font-weight: normal"&gt;Value&lt;/B&gt; is that ugly blob we'll talk about later, and &lt;B style="mso-bidi-font-weight: normal"&gt;Type&lt;/B&gt; points to another metadata item. &lt;A href="http://msdn.microsoft.com/net/ecma/"&gt;&lt;FONT color=#000000&gt;CLI&lt;/FONT&gt;&lt;/A&gt; demands that that metadata item should be stored in MethodDef/MethodRef tables &lt;U&gt;and&lt;/U&gt; be an instance constructor. (Incidentally there are some indications that Value could, in fact, point to something else - current metadata token encoding allows for that. Whether that will ever be exploited remains to be seen...)&lt;BR&gt;So, based on all of the above&lt;B style="mso-bidi-font-weight: normal"&gt;, a custom attribute is an association between any metadata item &lt;/B&gt;(except another custom attribute) &lt;B style="mso-bidi-font-weight: normal"&gt;and a instance constructor&lt;/B&gt;. At least, this is what it is based on the &lt;A href="http://msdn.microsoft.com/net/ecma/"&gt;&lt;FONT color=#000000&gt;CLI&lt;/FONT&gt;&lt;/A&gt; as per &lt;A href="http://www.ecma-international.org/publications/standards/Ecma-335.htm"&gt;&lt;FONT color=#000000&gt;ECMA-335&lt;/FONT&gt;&lt;/A&gt;.&lt;O:P&gt;&lt;/O:P&gt; That's why we see ".ctor" explicitly mentioned in IL declaration - it is, in fact, just a pointer to an entry in MethodDef table.&lt;/SPAN&gt; &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .25in; mso-layout-grid-align: none"&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .25in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-fareast-font-family: Tahoma"&gt;&lt;SPAN style="mso-list: Ignore"&gt;3.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;What's that binary goop there? &lt;I style="mso-bidi-font-style: normal"&gt;On custom attribute value encoding.&lt;/I&gt; &lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;BR&gt;So what in the world is that scary blob that is being "assigned" to the constructor? It's clear it has something to do with attribute initialization - you can kind of see some hints of that in the character dump of the blob - but what exactly?&lt;BR&gt;Well, as you would expect, that is information necessary to initialize the attribute class properly. This is &lt;B style="mso-bidi-font-weight: normal"&gt;not&lt;/B&gt; - as one may assume - a binary in-memory representation of the attribute class instance itself, but instead encoded constructor arguments and property name/value pairs, allowing for subsequent attribute initialization.&lt;BR&gt;You can get a very detailed information on how to read this blob in &lt;A href="http://www.amazon.com/exec/obidos/tg/detail/-/0735615470/qid=1063358250/sr=8-1/ref=sr_8_1/104-5066928-3082302?v=glance&amp;amp;s=books&amp;amp;n=507846"&gt;&lt;FONT color=#000000&gt;Serge Lidin's Inside IL Assembler&lt;/FONT&gt;&lt;/A&gt;, but in a nutshell, here's what this it says&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level2 lfo1; tab-stops: list .75in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: olive; FONT-FAMILY: Tahoma"&gt;01 00&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt; - prolog&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level2 lfo1; tab-stops: list .75in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: olive; FONT-FAMILY: Tahoma"&gt;09&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt; &lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="COLOR: navy"&gt;43 6C 61 73 73 20 46 6F 6F&lt;/SPAN&gt;&lt;/B&gt; - first ctor argument; string "class Foo" prefixed by its length (0x09). &lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level2 lfo1; tab-stops: list .75in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Tahoma"&gt;00&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt; - second ctor argument; bool "false"&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level2 lfo1; tab-stops: list .75in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: olive; FONT-FAMILY: Tahoma"&gt;54 0E 0A&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt; &lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="COLOR: navy"&gt;52 65 73 6F 75 72 63 65 49 44&lt;/SPAN&gt;&lt;/B&gt; &lt;SPAN style="COLOR: olive"&gt;03&lt;/SPAN&gt; &lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="COLOR: navy"&gt;69 64 31 &lt;/SPAN&gt;&lt;/B&gt;- name/value pair representing "ResourceID"="ID1". &lt;BR&gt;0x54(SERIALIZATION_TYPE_PROPERTY) tells us this is a property name/value pair&lt;BR&gt;0x0E(ELEMENT_TYPE_STRING) specifies property type&lt;BR&gt;0x0A is the length of "ResourceID";&lt;BR&gt;0x03 is the length of "id1"&lt;BR style="mso-special-character: line-break"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;As you can see, while the constructor argument types are extracted from its signature and not explicitly encoded in the blob, property name/value pairs explicitly specify property/field type.&lt;BR&gt;So that blob represents a sequence of actions that need to be carried out to create an attribute instance. Who gets to create an attribute class? Read on...&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .25in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-fareast-font-family: Tahoma"&gt;&lt;SPAN style="mso-list: Ignore"&gt;4.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;What was that bit on proverbial trees about? &lt;I style="mso-bidi-font-style: normal"&gt;Who really creates a custom attribute. &lt;O:P&gt;&lt;/O:P&gt;&lt;/I&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;So as we can see, there is more than enough information to create an instance of &lt;I style="mso-bidi-font-style: normal"&gt;ClassDescriptionAttribute &lt;/I&gt;- we know the class, necessary constructor signature, its arguments and additional properties to assign. &lt;BR&gt;So what does it get created by? The compiler? It actually emits all the information necessary to create tan instance of the attribute class, but no, it doesn't create it in a conventional sense. &lt;BR&gt;CLR execution engine? That's a possibility, but how would that work - would it just go ahead and create all custom attributes on startup? Keep in mind, we actually need execute some IL code to create an instance of an attribute class - namely the constructor - surely doing all that would be an awful waste of time, especially if no-one bothers to actually access the attributes?&lt;BR&gt;You have probably guessed it - instances of attribute class are actually created by Reflection when someone asks - typically via Type.GetCustomAttributes(). I suspect that this is considered to be an implementation detail of the Reflection API though - all you really need to know is that your attribute class gets created, and you can't really control when and how. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; &lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;BR&gt;While we are on the subject of implementation details, you will find that - at least in .Net v1.1 - attribute classes are in fact created &lt;B style="mso-bidi-font-weight: normal"&gt;every time you ask for them&lt;/B&gt;.&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.25in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Let's update the constructor of &lt;I style="mso-bidi-font-style: normal"&gt;ClassDescriptionAttribute &lt;/I&gt;as follows:&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Tahoma"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt; ClassDescriptionAttribute( &lt;SPAN style="COLOR: blue"&gt;...&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;)&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Console.WriteLine( "ClassDescriptionAttribute created");&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;...&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;}&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;BR&gt;And then run the following code snippet:&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Console.WriteLine("Extracting custom attribute...");&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ClassDescriptionAttribute descriptionAtribute = &lt;SPAN style="COLOR: blue"&gt;typeof&lt;/SPAN&gt;(Foo).GetCustomAttributes( &lt;SPAN style="COLOR: blue"&gt;typeof&lt;/SPAN&gt;( ClassDescriptionAttribute ), &lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt; )[0] &lt;SPAN style="COLOR: blue"&gt;as&lt;/SPAN&gt; ClassDescriptionAttribute;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Console.WriteLine("Extracting custom attribute yet again...");&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ClassDescriptionAttribute descriptionAtribute2 = &lt;SPAN style="COLOR: blue"&gt;typeof&lt;/SPAN&gt;(Foo).GetCustomAttributes( &lt;SPAN style="COLOR: blue"&gt;typeof&lt;/SPAN&gt;( ClassDescriptionAttribute ), &lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt; )[0] &lt;SPAN style="COLOR: blue"&gt;as&lt;/SPAN&gt; ClassDescriptionAttribute;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Console.WriteLine( descriptionAtribute == descriptionAtribute2 );&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Basically we are extracting the same attribute twice and then compare that the objects that get returned are in fact the same. If you run this code, you may be surprised to find out that it prints:&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Extracting custom attribute...&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;ClassDescriptionAttribute created&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Extracting custom attribute yet again...&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;ClassDescriptionAttribute created&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;False&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Interesting, huh? Every time you call to ask for an attribute, Reflection creates another instance of it, which of course means that returned values will have different identity (by the way, you can make them "look" the same by redefining operator "=" and methods "Equal" and "GetHashCode" based on attribute fields rather then binary identity).&lt;O:P&gt;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;So let's get back to the original question - "&lt;B style="mso-bidi-font-weight: normal"&gt;does a custom attribute get created if no-one asks for it?&lt;/B&gt;". The answer is "&lt;B style="mso-bidi-font-weight: normal"&gt;no&lt;/B&gt;". There is a bit of a twist as far as pseudo-attributes are concerned, but then again those things &lt;B style="mso-bidi-font-weight: normal"&gt;never&lt;/B&gt; get created, so the answer still remains. &lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;IMG height=1 src="/aggbug.aspx?PostID=43065" width=1&gt; &lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=486360" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/oleglv/archive/tags/Managed+Code/default.aspx">Managed Code</category><category domain="http://blogs.msdn.com/oleglv/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/oleglv/archive/tags/CLR+eye/default.aspx">CLR eye</category></item><item><title>On career development, cluefulness and derivatives</title><link>http://blogs.msdn.com/oleglv/archive/2003/10/28/56143.aspx</link><pubDate>Tue, 28 Oct 2003 23:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:56143</guid><dc:creator>oleglv</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/oleglv/comments/56143.aspx</comments><wfw:commentRss>http://blogs.msdn.com/oleglv/commentrss.aspx?PostID=56143</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt; 
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;I think &lt;a href="http://software.ericsink.com/Career_Calculus.html"&gt;this&lt;/a&gt; is
        pretty fantastic. And scary in a way. In fact I have been thinking something along
        those lines for a while, just was never able to clearly articulate it. &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;I guess it just confirms the fact
        that nothing happens by itself and that sometimes we are "so busy doing our job, we
        forget to do our job" - in a larger sense, anyway... &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;I guess it all comes down to this
        - why have you chosen to be a developer? What does it mean for you to be one? Sure,
        our direct responsibility is to write code, get it to a good quality and ship it.
        The very feeling that you have helped someone is pretty powerful as of itself, but
        the reality is, there needs to be more to this. Eventually every person needs to ask
        themselves this very selfish question &lt;b style="mso-bidi-font-weight: normal"&gt;"what's
        in it for me?"&lt;/b&gt;.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;And that is a totally valid question
        to ask - sometimes work can be tedious, exhausting and demanding, so there must be
        a rewarding part somewhere. And I'm not talking about a delayed gratification of shipping
        - no-one ships once a month, so there should be something that keeps you going. The
        mere "I just like writing code" almost never covers all of it. There's always more
        to it. You may like to learn new things, to work in a certain environment, to earn
        certain income, to gain recognition&amp;#160;&amp;#160;... or all of the above. But it is
        important that everyone understands what it is that is really driving them and if
        there is anything that is driving them - otherwise they may find it very hard to go
        that extra mile we all have to go every now and then. &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;And it's trivial, but sometimes
        we loose it somehow - a career is not something that just happens to you all by itself,
        even if you work for a major company and steadily climb the ladder. More importantly,
        career is not something objective - of two people doing the same job, one can be deliriously
        happy and the other quite miserable. &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;I suppose, while I'm on the topic,
        I should probably say what it means to me. I completely agree with &lt;a href="http://software.ericsink.com/Career_Calculus.html"&gt;Eric&lt;/a&gt; there
        - it's all about "cluefullness" for me. I need to know that I have learned more, that
        I have a broader and deeper view of the world. Why does it matter to me that the &lt;a href="http://blogs.gotdotnet.com/olegl/PermaLink.aspx/6b0b3348-7bda-45c1-86ec-727cb470e551"&gt;CLR
        custom attributes are a little funny&lt;/a&gt;? That &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vcconmixeddllloadingproblem.asp"&gt;you
        shouldn't be using DllMain in MC++ DLLs if the current release of CLR&lt;/a&gt; and why?
        I have no idea. It just does. It makes me high. It makes me feel empowered... and
        of course, it also helps me with my everyday work. &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&amp;#160; &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;PS It goes without saying... but
        let me say this anyway: &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;The content of this site are my
        own personal opinions and do not represent my employer's view in anyway. In addition,
        my thoughts and opinions often change, and as a weblog is intended to provide a semi-permanent
        point in time snapshot you should not consider out of date posts to reflect my current
        thoughts and opinions. &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
    &lt;/p&gt;&lt;/span&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=56143" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/oleglv/archive/tags/General/default.aspx">General</category></item><item><title>DllMain : a horror story</title><link>http://blogs.msdn.com/oleglv/archive/2003/10/28/56142.aspx</link><pubDate>Tue, 28 Oct 2003 12:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:56142</guid><dc:creator>oleglv</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/oleglv/comments/56142.aspx</comments><wfw:commentRss>http://blogs.msdn.com/oleglv/commentrss.aspx?PostID=56142</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;a href="http://blogs.gotdotnet.com/olegl/PermaLink.aspx/d1610664-8d0b-4579-a20c-712516e08423"&gt;Last
        time&lt;/a&gt; I was talking about DllMain and what nasty things can occur if you misuse
        it. I have also mentioned that it may not be one of those "I'm always careful it can
        never happen to me" situations - things can get out of hand very quickly. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Keep in mind that OS loader has
        been evolving over time. OS creators know that not all DLLs are well-behaved and they
        have been trying to do their best to minimize the impact of poorly-written DllMains,
        however it is still more than possible to shot oneself in the foot. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Let me give you a very simple example
        as to how easy this can be (behavior may vary on different OS's, I'm running this
        on Windows XP SP1). 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Consider the following:&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: Tahoma"&gt;/////////////////////////////////////////////////////////////////////&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: Tahoma"&gt;Dll2.cpp&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: Tahoma"&gt;/////////////////////////////////////////////////////////////////////&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;HMODULE g_Module;&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;TCHAR g_tclpszFileName[256];&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;BOOL APIENTRY DllMain( HINSTANCE
        hModule, 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;DWORD&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;ul_reason_for_call, 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;LPVOID
        lpReserved&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 5"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;)&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;{&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (
        DLL_PROCESS_ATTACH == ul_reason_for_call )&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;printf("Dll2:DllMain\r\n");&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;g_Module
        = hModule;&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;::GetModuleFileName(
        g_Module, g_tclpszFileName, 255 );&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt; TRUE;&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;}&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: Tahoma"&gt;extern&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt; "C" &lt;span style="COLOR: blue"&gt;__declspec&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;dllexport&lt;/span&gt;) &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; WINAPIV
        OutputModuleInfo2(&lt;span style="COLOR: blue"&gt;void&lt;/span&gt;)&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;{&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;printf("Enetering
        Dll2::OutputModuleInfo2\r\n");&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;printf("Name:
        %s\r\nHandle 0x%x\r\n", g_tclpszFileName, g_Module );&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;}&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: Tahoma"&gt;///////////////////////////////////////////////////////////////////// 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: Tahoma"&gt;// Dll1.cpp &lt;b style="mso-bidi-font-weight: normal"&gt;-
        NEVER do this&lt;/b&gt; 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: Tahoma"&gt;/////////////////////////////////////////////////////////////////////&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: Tahoma"&gt;typedef&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; (WINAPIV
        *LPFOUTPUTMODULEINFOFUNC) (&lt;span style="COLOR: blue"&gt;void&lt;/span&gt;);&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;HMODULE g_Module;&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;TCHAR g_tclpszFileName[256];&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;BOOL APIENTRY DllMain( HINSTANCE
        hModule, 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;DWORD&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;ul_reason_for_call, 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;LPVOID
        lpReserved&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 5"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;)&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;{&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (
        DLL_PROCESS_ATTACH == ul_reason_for_call )&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;printf("Dll1:DllMain\r\n");&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;g_Module = hModule;&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;::GetModuleFileName(
        g_Module, g_tclpszFileName, 255 );&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: green"&gt;//
        Load Dll2 - never EVER do this&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;HMODULE
        hModule1 = ::LoadLibrary("Dll2.dll");&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/b&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;LPFOUTPUTMODULEINFOFUNC
        lpOutputModuleInfo1Func = (LPFOUTPUTMODULEINFOFUNC)::GetProcAddress( hModule1,"OutputModuleInfo2");&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/b&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;lpOutputModuleInfo1Func();&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/b&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt; TRUE;&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;}&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: Tahoma"&gt;extern&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt; "C" &lt;span style="COLOR: blue"&gt;__declspec&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;dllexport&lt;/span&gt;)&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;void&lt;/span&gt; WINAPIV
        OutputModuleInfo1(&lt;span style="COLOR: blue"&gt;void&lt;/span&gt;)&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;{&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;printf("Enetering
        Dll1::OutputModuleInfo1\r\n");&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;printf("Name:
        %s\r\nHandle 0x%x\r\n", g_tclpszFileName, g_Module );&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;}&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: Tahoma"&gt;/////////////////////////////////////////////////////////////////////&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: Tahoma"&gt;// Main.cpp 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: Tahoma"&gt;/////////////////////////////////////////////////////////////////////&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: Tahoma"&gt;extern&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt; "C" &lt;span style="COLOR: blue"&gt;__declspec&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;dllimport&lt;/span&gt;) &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; WINAPIV
        OutputModuleInfo1(&lt;span style="COLOR: blue"&gt;void&lt;/span&gt;);&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: Tahoma"&gt;extern&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt; "C" &lt;span style="COLOR: blue"&gt;__declspec&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;dllimport&lt;/span&gt;) &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; WINAPIV
        OutputModuleInfo2(&lt;span style="COLOR: blue"&gt;void&lt;/span&gt;);&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: Tahoma"&gt;int&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt; _tmain(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; argc,
        _TCHAR* argv[])&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;{&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;OutputModuleInfo1();&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;OutputModuleInfo2();&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt; 0;&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;}&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;What's wrong with this? Let me
        count the ways. On top of non-existent error-handling and the fact that we have an
        un-paired LoadLibrary() call, this code has a very fundamental problem. &lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;Let's
        just say that depending on how this code is compiled, it may 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;ul style="MARGIN-TOP: 0in" type="disc"&gt;
        &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo1; tab-stops: list .5in"&gt;
            &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Run and produce results you expect 
            &lt;O:P&gt;&lt;/O:P&gt;
            &lt;/span&gt; 
        &lt;/li&gt;
        &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo1; tab-stops: list .5in"&gt;
            &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Run and produce results you don't
            expect&lt;O:P&gt;&lt;/O:P&gt;
            &lt;/span&gt; 
        &lt;/li&gt;
        &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo1; tab-stops: list .5in"&gt;
            &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Blow up with AV&lt;O:P&gt;&lt;/O:P&gt;
            &lt;/span&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;That's right. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Let's dig into it.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;First let's see what this code
        is supposed to do in the first place. You'll have to bear with me here - it's after
        midnight and I haven't been able to come up with something brilliantly meaningful,
        but this will just have to do for now.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;As you can see, we are dealing
        with two DLLs and one EXE that uses those DLLs. First DLL (inventively called Dll2)
        - gets its own HMODULE in DLLMain(DLL_PROCESS_ATTACH), gets its name based on that
        and stores them away in global variables. Exported function OutputModuleInfo2 simply
        prints that out using printf.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Dll1 is almost identical, except
        it dynamically calls into Dll2 right after collecting its own information. It's a
        little weird, but this is just a primitive example after all.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.25in"&gt;
        &lt;ST1:PLACE w:st="on"&gt;
            &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Main&lt;/span&gt; 
        &lt;/ST1:PLACE&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;is a console appliccation that
        is statically bruit against export libraries produced by the build of the first two
        DLLs and calls both OutputModuleInfo1 and OutputModuleInfo2. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Simple enough? Let's roll.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;ol style="MARGIN-TOP: 0in" type="1" start="1"&gt;
        &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo2; tab-stops: list .5in"&gt;
            &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;It
            works! It works!&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt; Let's
            compile everything, but make sure that all three binaries use CRT(C/C++ runtime) dynamically
            (/MD compiler option) and that Dll2.lib appears &lt;u&gt;before&lt;/u&gt; Dll1.lib in linker options
            pertaining to additional input libraries for our console app (something like &lt;i style="mso-bidi-font-style: normal"&gt;link.exe
            main.obj /out:main.exe dll2.lib dll1.lib&lt;/i&gt;). Turns out that is important - we'll
            see why in a little bit. When you run the application, it outputs:&lt;br style="mso-special-character: line-break" /&gt;
            &lt;br style="mso-special-character: line-break" /&gt;
            &lt;O:P&gt;&lt;/O:P&gt;
            &lt;/span&gt;
        &lt;/li&gt;
    &lt;/ol&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Dll2:DllMain&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Dll1:DllMain&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Enetering
        Dll2::OutputModuleInfo2&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Name:
        c:\Temp\KillDllMain\Dll2.dll&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Handle
        0x10000000&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Enetering
        Dll1::OutputModuleInfo1&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Name:
        c:\Temp\KillDllMain\Dll1.dll&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Handle
        0x320000&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Enetering
        Dll2::OutputModuleInfo2&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Name:
        c:\Temp\KillDllMain\Dll2.dll&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Handle
        0x10000000&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;As you see, things seem to be working
        fine. One thing that is worth pointing out is that - as you can see from the output
        - DllMain for Dll2.dll was called before DllMain of Dll1.dll. Why? Well, technically,
        there's no explicit guarantee as to the order of these things - it is all in the loader's
        hands. &lt;a href="http://blogs.gotdotnet.com/olegl/PermaLink.aspx/d1610664-8d0b-4579-a20c-712516e08423"&gt;As
        I mentioned before&lt;/a&gt;, the loader looks at static dependencies and builds a list
        of DllMains to be called based on that. But what happens if the order really doesn't
        matter? From loader's perspective, Main.exe depends on Dll1 and Dll2 and there's no
        reason to choose one over the other (remember, the fact that Dll1 does in fact load
        Dll2 is our little dirty secret). 
        &lt;br /&gt;
        &lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Well,
        turns out that the loader seems to be preserving the order in which the imported DLLs
        are listed in the Imports Section of the loading executable. You can read all about
        the low-level details in &lt;a href="http://msdn.microsoft.com/msdnmag/issues/02/03/PE2/default.aspx"&gt;Matt
        Pietrek's article&lt;/a&gt;, but for the purpose of this discussion let's just say that
        each PE file (EXE or DLL) knows what binaries it "references" - that is what external
        functions it imports - and that a list of those binaries, together with referenced
        functions is linked into its PE header. Microsoft Linker seems to build that header
        based on the order in which export libraries are supplied, which is why we built our
        app the way we did. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;What
        happens if change that? Let's see.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;ol style="MARGIN-TOP: 0in" type="1" start="2"&gt;
        &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo2; tab-stops: list .5in"&gt;
            &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Huh?
            But...&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt; So now let's
            build the same code, only this time supply export libraries in the opposite order
            (something like &lt;i style="mso-bidi-font-style: normal"&gt;link.exe main.obj /out:main.exe
            dll1.lib dll2.lib).&lt;/i&gt; Let's run it:&lt;br style="mso-special-character: line-break" /&gt;
            &lt;br style="mso-special-character: line-break" /&gt;
            &lt;O:P&gt;&lt;/O:P&gt;
            &lt;/span&gt;
        &lt;/li&gt;
    &lt;/ol&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Dll1:DllMain&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Enetering
        Dll2::OutputModuleInfo2&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Name:&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Handle
        0x0&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Dll2:DllMain&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Enetering
        Dll1::OutputModuleInfo1&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Name:
        c:\Temp\KillDllMain\Dll1.dll&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Handle
        0x10000000&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Enetering
        Dll2::OutputModuleInfo2&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Name:
        c:\Temp\KillDllMain\Dll2.dll&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Handle
        0x320000&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/i&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Interesting... As you see, this
        time DllMain from Dll1 got called first. That loaded Dll2 and its OutputModuleInfo2
        got called ... before its DllMain! No wonder it printed what it did. Note that the
        second call into OutputModuleInfo2 went through just fine because Dll2's DllMain was
        called already. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;So why in the world is OS loader
        acting so dumb? Doesn't it know we are loading Dll2? We have explicitly called LoadLibrary
        after all, which loaded it from disk, laid it out in memory, resolved its exports
        etc. Why wasn't DllMain called? If you experiment a little, you will find out that
        in most cases DllMain of dynamically loaded libraries &lt;b style="mso-bidi-font-weight: normal"&gt;will&lt;/b&gt; be
        called, even if the "illegal" LoadLibrary is used to load it. The only case that will
        not take place is when OS loader already "knows" about that DLL but hasn't yet called
        DllMain on it, which is exactly what happened here. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Main.exe &lt;b style="mso-bidi-font-weight: normal"&gt;statically&lt;/b&gt; depends
        on Dll2.dll, so it's already in the loader's plan. It turns out, the loader is not
        so willing to change its original plan created based on static dependencies. If new
        binaries get thrown in, the loader will stop and dutifully load them; but if the binary
        is in fact the "old" one - that is already in the plan - the loader will just skip
        it. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Why? My guess is that this works
        pretty well for most scenarios. The loader is still trying to be nice and compensate
        for our bad behavior. Once we attempt to load something it already knows about, it
        simply preserves its current plan - I suspect doing otherwise would cause all kinds
        of nasty consequences.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;Mind you, we are
        on no position to complain - we are not supposed to call LoadLibrary from DllMain
        in the first place. Keep in mind, these are my speculations - I'm not trying to give
        a precise recipe as to how the OS loader can be mistreated, I'm just saying that &lt;b style="mso-bidi-font-weight: normal"&gt;it
        can be done&lt;/b&gt;. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;So...there you go. In this particular
        situation you "just" got the wrong value printed out, but you can imagine that this
        can easily cause a wide range of nastiness - AVs for instance. Speaking of which...&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;ol style="MARGIN-TOP: 0in" type="1" start="3"&gt;
        &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo2; tab-stops: list .5in"&gt;
            &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;What???
            How did that happen?...&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt; Let's
            build the whole thing again, only this time let's use static CRT (/MT or /ML compiler
            options). Why should it matter, right? 
            &lt;br /&gt;
            Now let's run it:&lt;br /&gt;
            &lt;br /&gt;
            &lt;i style="mso-bidi-font-style: normal"&gt;Dll1:DllMain&lt;br style="mso-special-character: line-break" /&gt;
            &lt;br style="mso-special-character: line-break" /&gt;
            &lt;/i&gt;
            &lt;O:P&gt;&lt;/O:P&gt;
            &lt;/span&gt;
        &lt;/li&gt;
    &lt;/ol&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;.&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;..
        and then... whoa... 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;First-chance exception at 0x77f57bd2
        (ntdll.dll) in MainApp.exe: 0xC0000005: Access violation reading location 0x00000010.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;But
        why? If you look at the stack, you will see the following:&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;ntdll.dll!_RtlAllocateHeap@12()&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;+
        0x24&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Dll2.dll!_heap_alloc(unsigned
        int size=0x00000018)&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;Line 212&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;C&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Dll2.dll!_nh_malloc(unsigned
        int size=0x00000018, int nhFlag=0x00000000)&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;Line
        113&lt;span style="mso-tab-count: 1"&gt; &lt;/span&gt;C&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Dll2.dll!malloc(unsigned
        int size=0x00000018)&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;Line 54 + 0xf&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;C&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Dll2.dll!_mtinitlocknum(int
        locknum=0x00000011)&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;Line 251 + 0x7&lt;span style="mso-tab-count: 1"&gt;&amp;#160; &lt;/span&gt;C&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Dll2.dll!_lock(int
        locknum=0x00000011)&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;Line 311 + 0x6&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160; &lt;/span&gt;C&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Dll2.dll!_lock_file2(int
        i=0x00000001, void * s=0x00346b68)&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;Line
        267 + 0x9&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;C&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Dll2.dll!printf(const
        char * format=0x0034204c, ...)&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;Line 57
        + 0xd&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;C&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/b&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Dll2.dll!OutputModuleInfo2()&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;Line
        30 + 0xa&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;C++&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/b&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&amp;gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Dll1.dll!DllMain(HINSTANCE__
        * hModule=0x10000000, unsigned long ul_reason_for_call=0x00000001, void * lpReserved=0x0012fd30)&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;Line
        30 + 0x5&lt;span style="mso-tab-count: 1"&gt;&amp;#160; &lt;/span&gt;C++&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Dll1.dll!_DllMainCRTStartup(void
        * hDllHandle=0x10000000, unsigned long dwReason=0x00000001, void * lpreserved=0x0012fd30)&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;Line
        297 + 0xd&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;C&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;So this is caused by calling "printf"
        from Dll2's &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;OuputModuleInfo2&lt;/span&gt;,
        which is sort of strange. If you look some more, you will find that the&amp;#160;CRT&amp;#160;internal
        global&amp;#160;_crtheap is NULL, which means that CRT has no heap. Why? You guessed it
        - static CRT allocates its heap in DllMain of the owning DLL! If our case DllMain
        wasn't called yet, so naturally - no heap.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Ouch. (Incidentally, this means
        that just about any CRT call will AV - it's awfully difficult to do anything without
        allocating any memory...)&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: Tahoma"&gt;Moral&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/b&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;OK, this is much longer than I
        intended... but here's the moral: &lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 14pt; COLOR: red; FONT-FAMILY: Tahoma"&gt;be
        careful&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;. OS loader is
        not dumb, and it is as forgiving as it gets, but sometimes it won't be there to help
        - simply because it has no idea what your intentions are.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.25in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;OK, I think I'm officially done
        with the topic - I'm feeling much better now :)&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt; 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=56142" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/oleglv/archive/tags/Platform/default.aspx">Platform</category><category domain="http://blogs.msdn.com/oleglv/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://blogs.msdn.com/oleglv/archive/tags/Tidbits/default.aspx">Tidbits</category></item><item><title>DllMain and life before birth</title><link>http://blogs.msdn.com/oleglv/archive/2003/10/24/56141.aspx</link><pubDate>Sat, 25 Oct 2003 03:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:56141</guid><dc:creator>oleglv</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/oleglv/comments/56141.aspx</comments><wfw:commentRss>http://blogs.msdn.com/oleglv/commentrss.aspx?PostID=56141</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: Tahoma"&gt;Preface&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/b&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;OS loader has always intrigued
        me - probably because it works behind the scenes and no-one normally bothers to understand
        what is that is does exactly, until strange or funny things start happening. And they
        do. And then we read through the documentation and we are forced to remember that
        there's more to loading a binary than just slapping it into process address space.
        In fact &lt;a href="http://msdn.microsoft.com/msdnmag/issues/02/02/PE/default.aspx"&gt;there's
        a wonderful article&lt;/a&gt; by Matt Pietrek that discusses those matters. I strongly encourage
        every person who deals with native code to go and read it - it may be quite enlightening
        for you - I know it was for me. When you know how things get loaded, you are less
        likely to forget to re-base your binary, consider early binary binding etc.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Every now and then another piece
        of information or a great summary on the subject comes up and I find myself mystified
        with the whole loader topic all over again. This time it was &lt;a href="http://blogs.gotdotnet.com/cbrumme/permalink.aspx/dac5ba4a-f0c8-42bb-a5cf-097efb25d1a9"&gt;a
        very lengthy post&lt;/a&gt; in &lt;a href="http://blogs.gotdotnet.com/cbrumme"&gt;Chris Brumme's
        blog&lt;/a&gt;. As many people have mentioned, the post in question is very long and very
        dense with technical information well, what else did you expect from Chris's blog?
        :) &lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;Anyway, in order to absorb the topic
        better and in hopes of getting the whole thing out of my system I decided to write
        things down.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: Tahoma"&gt;DllMain
        and OS loader&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/b&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;As we are all well aware now, things
        are not as easy as they seem. In fact are they ever? DllMain which used to be briefly
        discussed in most books on Win32 as a reasonably innocent initialization routine may
        now look like a vicious monster which obeys no rules and causes nasty side-effects.
        But let's get to the source - &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/dllmain.asp"&gt;MSDN
        reference&lt;/a&gt; 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;It all starts innocently enough.
        The article defines DllMain as an optional entry point into a DLL, called by the system
        when the DLL gets attached to a process or a thread; outlines the somewhat tricky
        but reasonable rules that govern the calls (for instance, calls may be unmatched for
        a thread if it's a main thread of the process or if it was already running when LoadLibrary
        was called), discusses abnormal termination and then 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;...whoa...&lt;/span&gt;&lt;/b&gt; 
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Without missing a heart-beat, it
        carries on describing what you can do there. That is pretty startling as of itself
        since when should you be limited in that regard? - but as you keep reading, things
        just get worse. It turns out, you can do pretty much nothing at all. Calls to LoadLibrary/LoadLibraryEx
        are explicitly prohibited. Other calls into kernel32 are OK. But you can't call into
        User32. And don't use CRT memory management (unless you are&amp;#160;linked statically)
        - use HeapAlloc instead. Oh, and of course don't call anything that would do any such
        nasty things: that would be bad. One last thing - don't read the registry either.
        Have a nice day.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;The fact that none of this is written
        is &lt;/span&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: Tahoma"&gt;big&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;, &lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: Tahoma"&gt;bold&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;, &lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 14pt; COLOR: red; FONT-FAMILY: Tahoma"&gt;maybe
        even red&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt; print is truly
        unfortunate -&amp;#160;it really ought to be, because most people simply miss that part.
        So let's say, you have read it all now the question is: &lt;b style="mso-bidi-font-weight: normal"&gt;why&lt;/b&gt;? 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;The thing is, as far as your binary
        is concerned, DllMain gets called at a truly unique moment. By that time OS loader
        has found, mapped and bound the file from disk, but - depending on the circumstances
        - in some sense your binary may not have been "fully born". Things can be tricky.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;In a nutshell, when DllMain is
        called, OS loader is in a rather fragile state. First off, it has applied a lock on
        its structures to prevent internal corruption while inside that call, and secondly,
        some of your dependencies may not be in a fully loaded state. Before a binary gets
        loaded, OS Loader looks at its static dependencies. If those require additional dependencies,
        it looks at them as well. As a result of this analysis, it comes up with a sequence
        in which DllMains of those binaries need to be called. It's pretty smart about things
        and in most cases you can even get away with not following most of the rules described
        in MSDN - but not always.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;The thing is, the loading order
        is unknown to you, but more importantly, it's built based on the &lt;b style="mso-bidi-font-weight: normal"&gt;static&lt;/b&gt; import
        information. If some dynamic loading occurs in your DllMain during DLL_PROCESS_ATTACH
        and you're making an outbound call, all bets are off. There is no guarantee that DllMain
        of that binary will be called and therefore if you then attempt to &lt;b style="mso-bidi-font-weight: normal"&gt;GetProcAddress&lt;/b&gt; into
        a function inside that binary, results are completely unpredictable as global variables
        may not have been initialized. Most likely you will get an AV.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Another scenario is when you start
        spinning a new thread on DLL_THREAD_ATTACH and wait for it to finish initialization
        via some syncronization technique. This blocks your thread in DllMain, while still
        keeping OS lock. This can lead to deadlocks. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Overall, if anything - &lt;strong&gt;&lt;span style="FONT-FAMILY: Tahoma"&gt;anything&lt;/span&gt;&lt;/strong&gt; -
        goes wrong in DllMain of one of the binaries, the whole process may be doomed.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;The trouble is, definition of "wrong"
        is very, very vague in this case. For instance, developers using MC++ know that you
        shouldn't even dream of having DllMain in your library. And if you do you do, &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vcconmixeddllloadingproblem.asp"&gt;you
        may be very, very sorry&lt;/a&gt;. I think CLR folks want to fix this for the "Whidbey"
        release. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Chris Brumme lists the following
        things that &lt;b style="mso-bidi-font-weight: normal"&gt;should never, ever be done in
        DllMain&lt;/b&gt;.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .75in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Dynamic
        binds&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;. That includes
        LoadLibrary/UnloadLibrary calls or anything that may call implicitly call them&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .75in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Locking&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt; of
        any kind. If you are trying to acquire a lock that is currently help by a thread that
        needs OS loader lock (which you may be holding), you'll deadlock. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .75in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Cross-binary
        calls. &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;As been discussed
        the binary youre calling into may not have been initialized or have already been unutilized. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .75in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Starting
        new threads and then wait for completion&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;.
        As discussed, thread in question may need to acquire OS lock that you are holding. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;So, what does this tell us?&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: Tahoma"&gt;DllMain
        is that gun you can easily shoot yourself with&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/b&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;How many people do you know that
        did stupid things like calling CoInitialize() in DllMain? I know of cases when that
        was done on DLL_THREAD_ATTACH, which not only means that we were risking to hit a
        deadlock, but also that any thread in that process will have COM initialized. What's
        worse, it may be initialized with the wrong threading model. And then people will
        be wondering how the heck they ended up with STA threads in thread pools. Or something
        much more subtle like calling a system function that starts a worker thread as part
        of its execution? How many times did &lt;b style="mso-bidi-font-weight: normal"&gt;you&lt;/b&gt; do
        all those things?&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Another problem with this is that
        all these horrors can present themselves under very limited circumstances. In most
        cases things do work fine, but a race condition, a slightly modified DLL load order
        or other factors may change everything. Which means you may not even know it until
        your ship. This may be fine for a user application (well, things like that are &lt;b style="mso-bidi-font-weight: normal"&gt;never&lt;/b&gt; fine,
        it's just that the damage may not be substabtial), but this is always bad for servers
        -&amp;#160;especially if you are talking enterprise availability. I don't think this can
        ever become a security threat - one you can fight anyway -&amp;#160;but random crashes
        are just &lt;b style="mso-bidi-font-weight: normal"&gt;not nice&lt;/b&gt;.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;So let's get back to what we &lt;b style="mso-bidi-font-weight: normal"&gt;can&lt;/b&gt; do
        in DllMain. According to MSDN, "The entry-point function should perform only simple
        initialization or termination tasks."&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;These tasks can only include calls
        to Kernel32 (excluding LoadLibrary/LoadLibraryEx). If you look at what this means
        for you, you will find that this is extremely liming. &lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;Further,
        CRT functions, including memory allocations are not safe unless you are statically
        linked. This means that seemingly innocent things something like &lt;i style="mso-bidi-font-style: normal"&gt;g_pMyGlobalObject
        = new CMyGlobalObject()&lt;/i&gt; can theoretically cause all kinds of nasty stuff&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;because
        they will use &lt;b style="mso-bidi-font-weight: normal"&gt;malloc&lt;/b&gt; that is dynamically
        linked from msvcr*.dll.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;This leaves us with primitive types,
        synchronization objects initialization ... that's about it. And definitely -&amp;#160;&lt;b style="mso-bidi-font-weight: normal"&gt;definitely&lt;/b&gt; -
        no managed code.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;So what am I saying? There aren't
        too many things that are legal there; it's extremely easy to do illegal stuff - you
        have to always know if what you're calling really does, which is extremely difficult
        if you use something defined elsewhere - C/C++ LIB for instance; the compiler won't
        tell you that you are doing the wrong thing; and the code is likely to run fine in
        most cases... but &lt;b style="mso-bidi-font-weight: normal"&gt;not all&lt;/b&gt; of them. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Where options does this leave us
        with?&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;ul style="MARGIN-TOP: 0in" type="disc"&gt;
        &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo2; tab-stops: list .5in"&gt;
            &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Just
            say no&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;. Avoid the darn
            thing altogether and link with /noentry. Reconsider the way you deal with globals.
            Do lazy TLS initialization.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;
            &lt;O:P&gt;&lt;/O:P&gt;
            &lt;/span&gt; 
        &lt;/li&gt;
        &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo2; tab-stops: list .5in"&gt;
            &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Be
            very careful&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;. Sometimes
            you simply have to use it. It's just too ugly not to. Have a full code review. See
            what's being done and what OS does. Make sure that everyone understands that DllMain
            is just different. Read and memorize horror stories about people who didn't know better. 
            &lt;br /&gt;
            One thing you can do here to minimize the damage is disabling calls to your DllMain
            when new threads join/leave the process - this can be done with &lt;b style="mso-bidi-font-weight: normal"&gt;DisableThreadLibraryCalls&lt;/b&gt;.
            This is generally a good idea in all cases where you don't need thread-level initialization
            because OS loader doesn't need to call into your binary every time a new thread is
            born&lt;/span&gt; 
        &lt;/li&gt;
        &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l1 level1 lfo2; tab-stops: list .5in"&gt;
            &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Be
            afraid. Be very afraid. &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Well,
            just leave things where they are. Things don't crash right now and you have other
            things to do. Good plan.&lt;O:P&gt;&lt;/O:P&gt;
            &lt;/span&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.75in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: Tahoma"&gt;Silver lining
        : DllMain and resource leaks diagnostics&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/b&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;There's one piece of information
        that gets provided through DllMain which you can't possibly get any other way. If
        you review the signature of DllMain, youll notice that the last argument passed in
        despite being called lpReserved actually has some meaning: 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;span style="FONT-SIZE: 8.5pt; COLOR: black; FONT-FAMILY: Verdana"&gt;If &lt;i&gt;fdwReason&lt;/i&gt; is
        DLL_PROCESS_ATTACH, &lt;i&gt;lpvReserved&lt;/i&gt; is NULL for dynamic loads and non-NULL for
        static loads. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0.1in 0in 0.1in 0.5in"&gt;
        &lt;span style="FONT-SIZE: 8.5pt; COLOR: black; FONT-FAMILY: Verdana"&gt;If &lt;i&gt;fdwReason&lt;/i&gt; is
        DLL_PROCESS_DETACH, &lt;i&gt;lpvReserved&lt;/i&gt; is NULL if &lt;b&gt;DllMain&lt;/b&gt; has been called by
        using &lt;b&gt;FreeLibrary&lt;/b&gt; and non-NULL if &lt;b&gt;DllMain&lt;/b&gt; has been called during process
        termination.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;As you see, lpvReserved does tell
        you something. Although I can't see why you would be interested in knowing whether
        your DLL has been statically or dynamically loaded -&amp;#160;there may be uses there,
        I just don't see them - but knowing &lt;u&gt;how&lt;/u&gt; you are being unloaded could be interesting. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;For one, if you're managing some
        kind of resource in DllMain, which only lives within process context, you can possibly
        skip some clean-up if you knew that the process is dying as it is. This is not too
        valuable because the very nature of DllMain does not make it a very good entry point
        for resource management. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;There are cases, however, when
        you expect your DLL to be unloaded in a specific way and you can use DllMain to verify
        that it is indeed being unloaded as you expect. For instance, if:&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 75pt; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo3; tab-stops: list 75.0pt"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;your
        DLL is in fact a COM server (and has no other uses), &lt;b style="mso-bidi-font-weight: normal"&gt;and&lt;/b&gt; 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 75pt; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo3; tab-stops: list 75.0pt"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;the
        COM host is well-behaved &lt;b style="mso-bidi-font-weight: normal"&gt;and&lt;/b&gt; 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 75pt; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo3; tab-stops: list 75.0pt"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;all
        of your COM objects have been properly released, 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;then you should expect that you
        will get lpvReserved=NULL - that is unloaded via FreeLibrary. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Heres what seems to be happening.
        Every well-behaved COM process should call CoUnintialize() on each thread when it
        gets shut down. Internally that calls DllCanUnloadNow on your binary which returns
        TRUE if all outstanding references are closed. If that's the case, COM will call FreeLibrary,
        which - unless there are other LoadLibrary references outstanding - will unload your
        DLL. That will pass lpvReserved=NULL. If &lt;b style="mso-bidi-font-weight: normal"&gt;any&lt;/b&gt; of
        these conditions is not satisfied, your DLL will reside in the process until it terminates
        and you'll get lpvReserved!=NULL( I'd like to thank 
        &lt;ST1:PERSONNAME w:st="on"&gt;Michael 
Entin&lt;/ST1:PERSONNAME&gt;
        - who really ought to start blogging - for helping me to get all the pieces together).&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;So if - and that's a &lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: Tahoma"&gt;big
        if&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt; - your application
        is well-behaved, and no-one ever messed up loading your DLL with LoadLibrary and forgetting
        to unload it, then lpvReserved!=NULL means that some of your COM objects have not
        been released. There's nothing your code can do about that - except maybe asserting
        - and you will then have to look into that further.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;This approach is not limited to
        only COM leaks -&amp;#160;theoretically you should expect that when your binary is leaving
        this world, it's not taking anything with it. You can look through the list of globally-managed
        resources and see of they have been disposed if. Be very, very careful there - you
        shouldn't be doing any stuff that may compromise OS loader:&amp;#160;see the four bullets
        above.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p&gt;
    &lt;/p&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=56141" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/oleglv/archive/tags/Platform/default.aspx">Platform</category><category domain="http://blogs.msdn.com/oleglv/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://blogs.msdn.com/oleglv/archive/tags/Tidbits/default.aspx">Tidbits</category></item><item><title>On WinForms and plumbing</title><link>http://blogs.msdn.com/oleglv/archive/2003/10/23/56140.aspx</link><pubDate>Fri, 24 Oct 2003 06:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:56140</guid><dc:creator>oleglv</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/oleglv/comments/56140.aspx</comments><wfw:commentRss>http://blogs.msdn.com/oleglv/commentrss.aspx?PostID=56140</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;It's late. I'm very hungry. I really
        want to go home. In fact, I almost left 3 hours ago, except something very strange
        started happening with our UI bits and I didn't know why. Turns out we had a plumbing
        problem. And now I need to vent.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Plumbing is great. In fact it's
        so great that you don't even know it exists until your lawn starts smelling funny
        or your toilets stop flushing. And then you're forced to remember. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Windows Forms is a fantastic library
        is a sense that it tries to isolate you from a lot of yucky stuff that you don't want
        to deal with - handles, message pumping, lovely functions such as CreateWindowEx&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;that
        take a boatload of arguments etc.(that is on current version Windows of course. On
        other platforms - or maybe future Windows platforms - the "yucky stuff" may be entirely
        different. But there &lt;b style="mso-bidi-font-weight: normal"&gt;will be &lt;/b&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;some).
        Basically WinForms hide the plumbing, and it feels great... and then you pipe bursts.
        Bizarrely, sometimes you didn't even know there &lt;b style="mso-bidi-font-weight: normal"&gt;was&lt;/b&gt; a
        pipe. Worse yet, something you don't even know what the heck is happening, except
        there's a whole lot of water on your carpet. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Enough of this - here's what happened.
        Pop-quiz: what's wrong with this code?&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; Form1
        : System.Windows.Forms.Form&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt; ToolBar
        toolBar1;&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt; ToolBarButton
        toolBarButton1;&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; Form1()&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;InitializeComponent();&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; InitializeComponent()&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.toolBar1
        = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; System.Windows.Forms.ToolBar();&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.toolBarButton1
        = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; System.Windows.Forms.ToolBarButton();&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.SuspendLayout();&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.toolBar1.Buttons.AddRange(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; System.Windows.Forms.ToolBarButton[]
        { &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.toolBarButton1 });&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.toolBar1.ButtonSize
        = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; System.Drawing.Size(36, 36);&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.toolBar1.Name
        = "toolBar1";&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.toolBar1.TabIndex
        = 0;&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.toolBarButton1.Text
        = "A";&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.Controls.Add(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.toolBar1);&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.Text
        = "Form1";&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.Layout
        += &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; System.Windows.Forms.LayoutEventHandler(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.Form1_Layout);&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.ResumeLayout(&lt;span style="COLOR: blue"&gt;false&lt;/span&gt;);&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;[STAThread]&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; 
        &lt;ST1:PLACE w:st="on"&gt;Main&lt;/ST1:PLACE&gt;
        () 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Application.Run(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; Form1());&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Form1_Layout(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender,
        System.Windows.Forms.LayoutEventArgs e)&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/b&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/b&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.toolBar1.ButtonSize
        = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; Size( &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.Width/10, &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.Height/10
        );&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/b&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;}&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;&lt;/b&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;}&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;This is all pretty straight-forward,
        huh? You have your form, which has a toolbox with one button. You then want your toolbar
        buttons to resize appropriately, based on the size of the form, so you start handling
        Layout event which, according to MSDN, is called "when a form or a control should
        reposition its child controls" (yes, I realize that the handler sucks - this.Width/10
        may turn in 0 and then things will go bad... just bear with me people).&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Looks good? Good. Now run it. Seriously,
        copy/paste this thing into a small C# project and run it. I'll wait. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;I know. Such innocuous code and
        such nasty error. If case you haven't gone through this little exercise, Application.Run()
        throws Win32Exception saying "Error creating window handle". So now you have water
        on your carpet and you don't know why. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;There are three factors here&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .75in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Form.Layout
        gets fired from ToolBar.OnHandleCreated()&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;.
        Yup. It does. If you don't believe me, just set a breakpoint and look at the stack. 
        &lt;br /&gt;
        Why is that? I'm not certain. This is definitely a little excessive, but hardly is
        a crime. All handles should be created by then, no reason to worry... or is there? 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .75in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;In
        Windows, toolbar button size can be set through TB_SETBUTTONSIZE message&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;.
        That's all great, but if you read MSDN carefully, you'll see that "The size can be
        set only before adding any buttons to the toolbar". 
        &lt;br /&gt;
        Why is that? I really have no idea. Maybe it's just hard to resize things dynamically.
        Again, a little too strict, but hardly a crime.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .75in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;span style="mso-list: Ignore"&gt;·&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Windows
        Forms try hard&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt; to hide
        all yucky stuff from you. So you add some buttons, call &lt;b style="mso-bidi-font-weight: normal"&gt;ToolBar.ButtonSize&lt;/b&gt;...
        what a poor ToolBar to do? Easy - simply recreate the handle, and set the new size.
        Again, a little excessive, but there isn't much that can be done here. OK, so it could
        have thrown an obscure exception saying that you can't change button size, but that
        would be too intimidating and confusing. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;So far, so good. Let's put this
        together(I haven't really seen source code for this, so this is all based on common
        sense and debugging)&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .75in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-fareast-font-family: Tahoma"&gt;&lt;span style="mso-list: Ignore"&gt;1.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Your
        run your app and the loop starts pumpin'&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .75in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-fareast-font-family: Tahoma"&gt;&lt;span style="mso-list: Ignore"&gt;2.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Your
        form gets &lt;b style="mso-bidi-font-weight: normal"&gt;WM_SHOWWINDOW&lt;/b&gt; message and realizes
        and needs to show its children, so it starts creating "real" Win32 windows and calls &lt;b style="mso-bidi-font-weight: normal"&gt;CreateWindowEx()&lt;/b&gt; for
        everything, including the toolbar.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .75in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-fareast-font-family: Tahoma"&gt;&lt;span style="mso-list: Ignore"&gt;3.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;"Real"
        windows toolbat gets created, &lt;b style="mso-bidi-font-weight: normal"&gt;WM_CREATE&lt;/b&gt; is
        sent to it and &lt;b style="mso-bidi-font-weight: normal"&gt;OnHandleCreated&lt;/b&gt;() gets
        called. Toolbar then fires up &lt;b style="mso-bidi-font-weight: normal"&gt;Parent.Layout&lt;/b&gt;.
        Keep in mind we are still inside &lt;b style="mso-bidi-font-weight: normal"&gt;CreateWindowEx&lt;/b&gt; call
        - it doesn't return until WM_CREATE is fully handled. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .75in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-fareast-font-family: Tahoma"&gt;&lt;span style="mso-list: Ignore"&gt;4.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;In &lt;b style="mso-bidi-font-weight: normal"&gt;Form1_Layout&lt;/b&gt; handler,
        we attempt to change toolbar button size, which - as we know - can only be done via
        handle recreation - so the toolbar calls &lt;b style="mso-bidi-font-weight: normal"&gt;DestroyWindow&lt;/b&gt;. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;What does this mean? &lt;b style="mso-bidi-font-weight: normal"&gt;We
        destroy the handle that was created while still in CreateWindowEx that creates the
        very handle!&lt;/b&gt; Needless to say, Win32 gets upset, and CreateWindowEx fails. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Caboom.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;So, is this a bug? I'd say Toolbox
        should be much more careful with what it does - especially when that comes from OnHandleCreated.
        Or make handle re-creation conditional based on whether buttons have been created
        or not. Or both - that way &lt;b style="mso-bidi-font-weight: normal"&gt;Parent.Layout&lt;/b&gt; gets
        fired first, then ButtonSize sees that there are no buttons yet, so no need re-create
        the handle. Yup, that'll do it.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;If only it was so easy. The truth
        is, as much as you can try, when you attempt to create a simple and consistent model
        on top of something that is not quite to straight-forward(Win32 is pretty old and
        inconsistent in places, which is the very reason Longhorn API gets introduced), you
        will always run into something like this.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;[Sigh]
        Anyway, all of this is fixable, but in a rather ugly way. This is what I came up with:&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: Tahoma"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; SafeToolBar
        : ToolBar&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; fullyCreated
        = &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;;&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;internal&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; FullyCreated 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.fullyCreated;
        }&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;protected&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; OnHandleCreated(EventArgs
        e)&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;base&lt;/span&gt;.OnHandleCreated
        (e);&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;fullyCreated
        = &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;;&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;I then use this class instead of
        ToolBar, and modify my OnLayout as follows :&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Form1_Layout(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender,
        System.Windows.Forms.LayoutEventArgs e)&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (
        !toolBar1.FullyCreated )&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt;;&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.toolBar1.ButtonSize
        = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; Size( &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.Width/10, &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.Height/10
        );&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Tahoma"&gt;}&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&amp;#160;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;This way the "dangerous" part of
        Form1_Layout will only be called after the toolbar is completely done creating. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;I'll talk to WinForm folks and
        see if we can permanently fix this...&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;[Sigh...again]Moral? &lt;b style="mso-bidi-font-weight: normal"&gt;The
        plumbing is there&lt;/b&gt;. Even if your pipes are all neatly tucked away into white closets,
        there's still water in them. &lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;It helps
        to understand how things &lt;b style="mso-bidi-font-weight: normal"&gt;really &lt;/b&gt;work...
        although in most cases it is convenient to forget the plumbing exists - if it works
        well. And I definitely think that Windows Forms team has done a pretty great job hiding
        it :)&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;P.S. I have discussed this with
        Michael Entin - a colleague of mine (who really ought to start blogging... but I digress)
        - and he went "Yeah, &lt;a href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html"&gt;leaky
        abstractions&lt;/a&gt; everywhere...". Read the link, it's nothing revolutionary, but very
        insightful... 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p&gt;
    &lt;/p&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=56140" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/oleglv/archive/tags/Managed+Code/default.aspx">Managed Code</category><category domain="http://blogs.msdn.com/oleglv/archive/tags/Tidbits/default.aspx">Tidbits</category></item><item><title>Say what?</title><link>http://blogs.msdn.com/oleglv/archive/2003/10/17/56139.aspx</link><pubDate>Fri, 17 Oct 2003 07:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:56139</guid><dc:creator>oleglv</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/oleglv/comments/56139.aspx</comments><wfw:commentRss>http://blogs.msdn.com/oleglv/commentrss.aspx?PostID=56139</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;I&amp;#160;keep changing my mind whether
        C/C++ is a blessing or a cruel joke on us all. Sometimes I think it's great (when
        it lets me cast a block of memory to just about anything I want), and sometimes I
        really hate it(when it lets me cast a block of memory to just about anything I want).&amp;#160;And
        sometimes, I come across something that makes my jaw drop again.&amp;#160; &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Nothing new -&amp;#160;just another
        confirmation that C is just full of warts of many kinds. &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;This time I was reading &lt;a href="http://blogs.gotdotnet.com/ericli/PermaLink.aspx/8d9a43c2-533d-42ec-a060-0a337b9a6810"&gt;Eric
        Lippert's entry on exceptions &lt;/a&gt;...&amp;#160;yeah.&amp;#160;&amp;#160;What do you think about
        this:&lt;/span&gt; 
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&amp;#160; &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;jmp_buf env; &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; i
        = 0; &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (
        setjmp( env ) &amp;lt;=100 ) &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{ &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;i++; &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;printf(
        "%d\r\n", i ); &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;longjmp(
        env, i ); &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;} &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;/span&gt; 
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
        &lt;O:P&gt;&lt;/O:P&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Newsflash: &lt;span style="COLOR: #993300"&gt;that's
        a loop&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;. Using &lt;a href="http://www.abbasite.com/"&gt;ABBA&lt;/a&gt;'s
        words, &lt;a href="http://www.abbasite.com/music/song.php?id=135"&gt;I wonder should laugh
        or cry&lt;/a&gt;...&lt;/span&gt; 
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;O:P&gt;&lt;/O:P&gt;
    &lt;/p&gt;
    &lt;p&gt;
    &lt;/p&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=56139" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/oleglv/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://blogs.msdn.com/oleglv/archive/tags/Tidbits/default.aspx">Tidbits</category></item><item><title>CLR eye for C# guy : the beginning</title><link>http://blogs.msdn.com/oleglv/archive/2003/10/14/56137.aspx</link><pubDate>Tue, 14 Oct 2003 12:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:56137</guid><dc:creator>oleglv</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/oleglv/comments/56137.aspx</comments><wfw:commentRss>http://blogs.msdn.com/oleglv/commentrss.aspx?PostID=56137</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;So I have been thinking about C#
        lately. C# was born together with .Net and it is commonly thought of as a language
        that - having little legacy of its own - exposes most of CLR capabilities in a safe
        and consistent way. Sure, Managed C++ extensions let you do a bit more with IJW and
        such - but then again, IJW was specifically designed for MC++ and is there to make
        migration easier. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Overall the perception seems to
        be that C# is the "clean slate" .Net language - lean, clean and gives you all you
        need... Most samples you can find out there are in C#, and I have heard plenty of
        stories involving companies that switched from VB or J++/Java directly to C# despite
        the fact that VB.Net and JSharp.Net are available.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;This is probably for the best -
        as I was saying before, C# has no legacy of its own so it is thought to have been
        designed so that no ugly tricks would be needed to translate language contracts into
        CLR execution primitives. That's probably true.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;What is also true, is that things
        are not quite that simple. There are things that CLR can do - safe, non-ugly things
        - that C #doesn't expose.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;There are things
        that C# exposes, which CLR is completely unaware of. And it just so happened that
        lately I have come across a bunch of examples of those things.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;So I decided to start as series
        of posts that look into those things - C# syntax, constructs and capabilities and
        what they &lt;b style="mso-bidi-font-weight: normal"&gt;really&lt;/b&gt; translate into as far
        as CLR is concerned.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;I'll probably start with simple
        stuff - like method arguments and delegates - and then just see where that goes. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;My methodology is going to be pretty
        simple - in most cases I'll be writing some C# code, compiling it and "cracking" it
        open with ILDASM (IL Disassembler that ships with Microsoft.Net SDK) and see what
        things will translate into... and then speculate on the findings of course :) I definitely
        don't expect that people reading this will have any deep intimate knowledge of IL
        - I don't have that myself - but I'll do my best to make the results self-explanatory.&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;All my findings are based on a
        particular compiler version - namely one shipped with CLR 1.1 v1.1.4322 (also ships
        with Vs.Net 2003). While I believe that most things will probably stay they same in
        future versions as well, that - of course - may not be true. 
        &lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;Stay tuned...&lt;O:P&gt;&lt;/O:P&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p&gt;
    &lt;/p&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=56137" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/oleglv/archive/tags/Managed+Code/default.aspx">Managed Code</category><category domain="http://blogs.msdn.com/oleglv/archive/tags/CLR+eye/default.aspx">CLR eye</category><category domain="http://blogs.msdn.com/oleglv/archive/tags/CSharp/default.aspx">CSharp</category></item><item><title>Hi, my name is Oleg and I'm technologically-compulsive</title><link>http://blogs.msdn.com/oleglv/archive/2003/10/13/56136.aspx</link><pubDate>Tue, 14 Oct 2003 06:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:56136</guid><dc:creator>oleglv</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/oleglv/comments/56136.aspx</comments><wfw:commentRss>http://blogs.msdn.com/oleglv/commentrss.aspx?PostID=56136</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt;Intro
        entries are for blogs are what "Hello world" applications are for most books - you
        need to have one, they all look alike - although everybody wants theirs to look different
        - and everyone (including the readers) are very happy to be over with them and move
        to the real stuff.&lt;o:p&gt;&lt;/o:p&gt;
        &lt;/span&gt;&lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt;So
        this is mine... and of course it's special :)&lt;o:p&gt;&lt;/o:p&gt;
        &lt;/span&gt;&lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt;I'm
        a developer on SQL Server "&lt;st1:place w:st="on"&gt;
            &lt;st1:State w:st="on"&gt;Yukon&lt;/st1:State&gt;
        &lt;/st1:place&gt;
        " team - more specifically Business Intelligence (BI) Unit. We are working on quite
        a bit of very new and exciting stuff, including Analysis Services, DTS and Reporting
        Services ... most of which I can't talk about yet :) ... but I will as soon as I can.&lt;o:p&gt;&lt;/o:p&gt;
        &lt;/span&gt;&lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt;I
        have been with Microsoft for 4 years - in fact, exactly 4 years on Oct 18&lt;sup&gt;th&lt;/sup&gt;.
        It's been one of the most professionally fulfilling experiences I have ever had, but
        this is not what I intend to write about here. You see, I'm your typical geek - I
        get a kick out of strange and interesting technical stuff. Also - for some strange
        reason - I find it really exciting to know how things &lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;strong&gt;really&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt; work
        and what can be done to make &lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;strong&gt;different&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt; things
        work &lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;strong&gt;together&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt;.
        I don't know why - I just do. And the reality is, sometimes this information is quite
        difficult to come across, but that's what this makes it all even more exciting. 
        &lt;o:p&gt;&lt;/o:p&gt;
        &lt;/span&gt;&lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt;I'm
        a very curious person and every time I start doing something I tend to try to get
        to the bottom of things, which at times turns into a obsessive-compulsive search for
        the inner peace ("why does it do that? why??? &lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;strong&gt;Must.
        Find. Out.&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt;")...
        and that's not always very productive( shh... don't tell my managers ). At times these
        campaigns bring some unexpected discoveries or what I consider interesting tidbits.
        And this is what this blog is for me - an outlet for my geeky compulsion :=)&lt;o:p&gt;&lt;/o:p&gt;
        &lt;/span&gt;&lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt;OK,
        seriously. Integrating with new technologies is tough. Things are moving pretty fast.
        And it doesn't really help you much if you happen to be employed by Microsoft. Well...
        it does help, just a little, but not &lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;strong&gt;very&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt; much.
        You see, Microsoft is a very large company, which may look like a huge monolith to
        the outside world, but the reality is that internally we are facing exactly the same
        issues our customers see externally - many teams, may moving parts, new things come
        about every day.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;
        &lt;o:p&gt;&lt;/o:p&gt;
        &lt;/span&gt;&lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt;"&lt;st1:place w:st="on"&gt;
            &lt;st1:State w:st="on"&gt;Yukon&lt;/st1:State&gt;
        &lt;/st1:place&gt;
        " team started using CLR, C# and VS.Net long before they became publicly available
        - in fact I recall that C# was referred to as "Cool" back then. It's been a pretty
        wild ride, and I guess now I feel compelled to share some of that experience with
        you. And this what this blog is also about.&lt;o:p&gt;&lt;/o:p&gt;
        &lt;/span&gt;&lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt;While
        I'll be rambling about a lot of stuff, mostly I'll be talking about technologies I
        have been working with for the last 3 years: &lt;i style="mso-bidi-font-style: normal"&gt;CLR
        in general and integration with VS.Net&lt;/i&gt;(The latter is in fact just un umbrella
        topic, it includes &lt;a href="http://msdn.microsoft.com/library/en-us/vsintro7/html/vxgrfAutomationObjectModelChart.asp?frame=true"&gt;&lt;span style="mso-bidi-font-weight: normal"&gt;Office-based
        VS.Net&lt;/span&gt;&lt;span style="mso-bidi-font-weight: normal"&gt; AddIns&lt;/span&gt;&lt;/a&gt;, a very
        little known "Designer Framework" owned by WinForms team (this one is pretty mysterious
        - all interfaces are fully public and some topics are selectively covered in a bunch
        of articles, but the whole picture is somehow not out there, which is a shame, because
        it is really cool) and the very hard-core low-level API behind it all -&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;a href="http://www.vsipdev.com/"&gt;&lt;span style="mso-bidi-font-weight: normal"&gt;VSIP
        (Visual Studio Industry Partner Program),&lt;/span&gt;&lt;/a&gt; which went public several months
        ago). Now I have been using all this stuff from managed code, which - of course -
        means that I will have to talk quite a bit about COM Interop as well. There will be
        some stuff on SQL Server/Business Intelligence too ... let's just see how it all comes
        along.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;
        &lt;o:p&gt;&lt;/o:p&gt;
        &lt;/span&gt;&lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt;It
        is important to note that I do not work within Developer Division (which includes
        VS.Net and CLR), which means I'm basically in a similar situation as just about everybody
        else. Sort of an insider look from the outside, if you will (or is it outsider looks
        from the inside?). This means that while I can speculate &lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;strong&gt;why&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt; things
        are implemented in a certain way - and I will - you'll have to take that as just that
        - my judgment. What I am always &lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;strong&gt;really&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt; interested
        in is &lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;strong&gt;how&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt; things
        work... and how to make them work they way &lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"&gt;&lt;strong&gt;*I*&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt; want
        them to.&lt;o:p&gt;&lt;/o:p&gt;
        &lt;/span&gt;&lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt;OK,
        this entry is getting waaaay longer than I wanted it to be, so I'll just wrap up.
        I should say that if you should definitely check out other &lt;a href="http://blogs.gotdotnet.com/"&gt;&lt;span style="mso-bidi-font-weight: normal"&gt;GotDotNet
        blogs&lt;/span&gt;&lt;/a&gt; &lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;If you are interested
        in CLR and Interop, I would definitely recommend reading &lt;a href="http://blogs.gotdotnet.com/cbrumme/"&gt;&lt;span style="mso-bidi-font-weight: normal"&gt;Chris
        Brumme&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://blogs.gotdotnet.com/anathan/"&gt;&lt;span style="mso-bidi-font-weight: normal"&gt;Adam
        Nathan&lt;/span&gt;&lt;/a&gt; on a regular basis - you'll be getting as much technical information
        as you can handle... and probably more :) If you are interested in VS.Net extensibility,
        the you also should check out &lt;a href="http://blogs.gotdotnet.com/craigs/"&gt;&lt;span style="mso-bidi-font-weight: normal"&gt;Craig
        Skibo&lt;/span&gt;&lt;span style="mso-bidi-font-weight: normal"&gt;'&lt;/span&gt;&lt;span style="mso-bidi-font-weight: normal"&gt;s
        blog&lt;/span&gt;&lt;/a&gt; - you'll know much more about the seemingly straight-forward EnvDTE...
        which is really not all that simple. :)&lt;o:p&gt;&lt;/o:p&gt;
        &lt;/span&gt;&lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span class="tx1"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt;So...
        the "Hello World" entry is over... Let the "real" part of this blog begin.&lt;o:p&gt;&lt;/o:p&gt;
        &lt;/span&gt;&lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;
        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-weight: bold"&gt;
        &lt;o:p&gt;&amp;#160;&lt;/o:p&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p&gt;
        &amp;#160;
    &lt;/p&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=56136" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/oleglv/archive/tags/General/default.aspx">General</category></item></channel></rss>