<?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>AllenD's WebLog : Interop</title><link>http://blogs.msdn.com/allend/archive/tags/Interop/default.aspx</link><description>Tags: Interop</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Managed Package Framework Webcast</title><link>http://blogs.msdn.com/allend/archive/2005/01/13/352456.aspx</link><pubDate>Thu, 13 Jan 2005 21:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:352456</guid><dc:creator>AllenD</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/allend/comments/352456.aspx</comments><wfw:commentRss>http://blogs.msdn.com/allend/commentrss.aspx?PostID=352456</wfw:commentRss><description>&lt;p&gt;I forgot about this 'til now.&lt;/p&gt; &lt;p&gt;&lt;a href="http://msevents.microsoft.com/cui/eventdetail.aspx?EventID=1032258553&amp;amp;Culture=en-US"&gt;http://msevents.microsoft.com/cui/eventdetail.aspx?EventID=1032258553&amp;amp;Culture=en-US&lt;/a&gt;&amp;nbsp;is a link to a MSDN webcast I did describing the Managed Package Framework for the masses.&amp;nbsp; Enjoy.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=352456" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/allend/archive/tags/VSIP/default.aspx">VSIP</category><category domain="http://blogs.msdn.com/allend/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.msdn.com/allend/archive/tags/Interop/default.aspx">Interop</category></item><item><title>IVsRunningDocumentTable.RenameDocument - how to call in managed code</title><link>http://blogs.msdn.com/allend/archive/2004/08/20/217958.aspx</link><pubDate>Fri, 20 Aug 2004 20:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:217958</guid><dc:creator>AllenD</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/allend/comments/217958.aspx</comments><wfw:commentRss>http://blogs.msdn.com/allend/commentrss.aspx?PostID=217958</wfw:commentRss><description>&lt;p&gt;&lt;font face="" size="2"&gt;Here's a little code to help managed packages call the Running Document Table to rename a document:&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="" size="2"&gt;Calling IVsRunningDocumenTable.RenameDocument is not entirely straighforward in managed code.&amp;nbsp; Here's some code the shows how to get the SVsRunningDocumentTable service, find a document therein and then rename it.&amp;nbsp; I've had one partner confused by the calling pattern so I figured I'd share the solution with you in case you ever need to employ it.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;IVsRunningDocumentTable pRDT = GetService(typeof(SVsRunningDocumentTable)) as IVsRunningDocumentTable;&lt;br /&gt;IVsUIShellOpenDocument doc = GetService(typeof(SVsUIShellOpenDocument)) as IVsUIShellOpenDocument;&lt;br /&gt;IVsUIShell uiShell = GetService(typeof(SVsUIShell)) as IVsUIShell;&lt;br /&gt;&lt;br /&gt;if (pRDT == null || doc == null) return;&lt;br /&gt;&lt;br /&gt;IVsHierarchy pIVsHierarchy;&lt;br /&gt;uint itemId;&lt;br /&gt;IntPtr docData;&lt;br /&gt;uint uiVsDocCookie;&lt;br /&gt;NativeMethods.ThrowOnFailure(pRDT.FindAndLockDocument((uint)_VSRDTFLAGS.RDT_NoLock, oldName, out pIVsHierarchy, out itemId, out docData, out uiVsDocCookie));&lt;br /&gt;&lt;br /&gt;if (docData != IntPtr.Zero) {&lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IntPtr pUnk = Marshal.GetIUnknownForObject(pIVsHierarchy);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Guid iid = typeof(IVsHierarchy).GUID;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IntPtr pHier;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Marshal.QueryInterface(pUnk, ref iid, out pHier);&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NativeMethods.ThrowOnFailure(pRDT.RenameDocument(oldName, newName, pHier, itemId));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } finally {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Marshal.Release(pHier);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Marshal.Release(pUnk);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Marshal.Release(docData);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;I hope this help!&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Allen&lt;/p&gt;&lt;/font&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=217958" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/allend/archive/tags/VSIP/default.aspx">VSIP</category><category domain="http://blogs.msdn.com/allend/archive/tags/Interop/default.aspx">Interop</category></item><item><title>Back in the late night saddle; ISelectionContainer</title><link>http://blogs.msdn.com/allend/archive/2004/04/09/110303.aspx</link><pubDate>Fri, 09 Apr 2004 08:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:110303</guid><dc:creator>AllenD</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/allend/comments/110303.aspx</comments><wfw:commentRss>http://blogs.msdn.com/allend/commentrss.aspx?PostID=110303</wfw:commentRss><description>&lt;P&gt;Here I am again at 1:00am, working.&amp;nbsp; Now, I know you may think that 1:00am is early, but consider the fact that I get up at 6:30am to get the whole thing going and it's just crazy how many hours of sleep I am NOT getting.&lt;/P&gt;
&lt;P&gt;But that is life when we're all trying to get Whidbey Beta 1 ready for customers to try.&lt;/P&gt;
&lt;P&gt;ISelectionContainer and Managed implementations thereof...&lt;/P&gt;
&lt;P&gt;The &lt;a title="VSIPDev.com" href="http://www.vsip.dev.com" &gt;VSIP&lt;/a&gt; Docs cover this, but they don't go into details about how this works in &lt;a title="VSIPDev.com" href="http://www.vsip.dev.com" &gt;VSIP&lt;/a&gt; Extras.&amp;nbsp; First there is the ISelectionContainer interface that an object must implement in order to be placed into the 'selection'.&amp;nbsp; For native code, it is simple to implement this interface as defined in the native designer.idl file.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The problem comes when managed objects want to play in the Property Browser.&amp;nbsp; If they just implement the ISelectionContainer as defined in the Microsoft.VisualStudio.Shell.Interop namespace, they'll work fine with some VS components, but the PropertyBrowser won't work.&amp;nbsp; The reason for this is that the Property Browser is itself managed code.&amp;nbsp; Normally you'd think that a managed object implementing ISelectionContainer would work well with a managed object like the Property Browser, but there's something subtle here.&lt;/P&gt;
&lt;P&gt;The Property Browser was written before the interop assemblies as they shipped in &lt;a title="VSIPDev.com" href="http://www.vsip.dev.com" &gt;VSIP&lt;/a&gt; Extras.&amp;nbsp; The managed definition the Property Browser expects is actually inside a managed assembly that isn't documented and isn't supported for 3rd parties to interact with.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;We solved this problem for you in &lt;a title="VSIPDev.com" href="http://www.vsip.dev.com" &gt;VSIP&lt;/a&gt; Extras by providing a SelectionContainer class in the Microsoft.VisualStudio.VSIP.Helper namespace.&amp;nbsp; This object implements both definitions of ISelectionContainer so that native VS code can interact with the object and the managed Property Browser can too.&amp;nbsp; When each asks for their respective interfaces (the same in one sense, but technically different in the managed world) they get the right one and use it.&amp;nbsp; The underlying implementation adapts the object to either interfaces.&lt;/P&gt;
&lt;P&gt;This is a pattern you'll see often in &lt;a title="VSIPDev.com" href="http://www.vsip.dev.com" &gt;VSIP&lt;/a&gt; in the future as we expose more and more functionality for things that have multiple definitions.&amp;nbsp; Unfortunately there are sometimes things that ship before we get to them to unify all the interfaces under one definition..&amp;nbsp; When that happens we can employ this pattern to satisfy all the callers of the interfaces and have them interact with the same underlying object.&lt;/P&gt;
&lt;P&gt;The &lt;a title="VSIPDev.com" href="http://www.vsip.dev.com" &gt;VSIP&lt;/a&gt; Extras download includes the source code for this in SelectionContainer.cs.&amp;nbsp; Take a look for the details.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=110303" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/allend/archive/tags/VSIP/default.aspx">VSIP</category><category domain="http://blogs.msdn.com/allend/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.msdn.com/allend/archive/tags/Interop/default.aspx">Interop</category></item><item><title>Renaming Interop Functions</title><link>http://blogs.msdn.com/allend/archive/2004/02/19/76840.aspx</link><pubDate>Fri, 20 Feb 2004 07:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:76840</guid><dc:creator>AllenD</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/allend/comments/76840.aspx</comments><wfw:commentRss>http://blogs.msdn.com/allend/commentrss.aspx?PostID=76840</wfw:commentRss><description>In a previous post (&lt;A href="http://blogs.msdn.com/allend/archive/2003/10/16/56791.aspx"&gt;http://blogs.msdn.com/allend/archive/2003/10/16/56791.aspx&lt;/A&gt;) I ranted about a weird behavior in generating Interop Assemblies where case changes occured in function names.&amp;nbsp; Well, it turns out that the TLB is the culprit.&amp;nbsp; All methods therein are case insensitive (the VB standard).&amp;nbsp; The first method into the TLB&amp;nbsp;wins when it comes to the case for all similarly named functions.&amp;nbsp; So if you have Foobar and FooBar functions in your IDL, they'll both end up with the case of the first one in the TLB and in the Interop Assembly for the TLB.&amp;nbsp; (I found the info in Adam Nathan's .NET/COM Interop book, THE definitive source for practically all Interop information.)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=76840" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/allend/archive/tags/Interop/default.aspx">Interop</category></item><item><title>Getting to IServiceProvider services with VSIP Extras</title><link>http://blogs.msdn.com/allend/archive/2004/02/16/74477.aspx</link><pubDate>Tue, 17 Feb 2004 01:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:74477</guid><dc:creator>AllenD</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/allend/comments/74477.aspx</comments><wfw:commentRss>http://blogs.msdn.com/allend/commentrss.aspx?PostID=74477</wfw:commentRss><description>&lt;P&gt;If you have access to the underlying Package base class, it exposes a method to get services called GetService.&amp;nbsp; You use it like so:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#000000&gt;IVsShell vsshell = (IVsShell) GetService(typeof(SVsShell));&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;vsshell can then be used to call methods it exposes (the IVsShell interface).&amp;nbsp; The GetService method is simply implemented by using the ServiceProvider object which wrapes the use of the IServiceProvider interface passed to the package's IVsPackage.SetSite method.&lt;/P&gt;
&lt;P&gt;For other objects that don't have access to the Package base class and receive another IServiceProvider (like the IVsWindowPane interface associated with VS windows which has its own SetSite method) then the GetService method exposed by the Package base class isn't available.&amp;nbsp; Instead the IVsWindowPane.SetSite method can be written as follows to create its own ServiceProvider object:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;ServiceProvider myServiceProvider;&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;int IVsWindowPane.SetSite(IServiceProvider sp)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;{&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; myServiceProvider = new ServiceProvider(sp);&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; return NativeMethods.S_OK;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Now code that has access to myServiceProvider can use it to get services just like in the Package base class.&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;IVsShell vsshell = (IVsShell) myServiceProvider.GetService(typeof(SVsShell));&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The ServiceProvider class handles all of the marshaling of the interface pointer and handles the error cases for you so you don't have to worry about them.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Unfortunately the VSIP Extras samples are frozen at this point and I'm not allowed to crack them to make this little change.&amp;nbsp; You can make it yourself in your code, though and it should save you some headaches when trying to get services in other objects besides your package based on the Helper's Package base class.&lt;/P&gt;
&lt;P&gt;I hope this helps,&lt;/P&gt;
&lt;P&gt;Allen&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=74477" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/allend/archive/tags/VSIP/default.aspx">VSIP</category><category domain="http://blogs.msdn.com/allend/archive/tags/Interop/default.aspx">Interop</category></item><item><title>Gotcha re-implementing interfaces</title><link>http://blogs.msdn.com/allend/archive/2003/11/06/56807.aspx</link><pubDate>Thu, 06 Nov 2003 21:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:56807</guid><dc:creator>AllenD</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/allend/comments/56807.aspx</comments><wfw:commentRss>http://blogs.msdn.com/allend/commentrss.aspx?PostID=56807</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;p&gt;
        I've recently stumbled upon a problem that a couple of VSIP Developers have encountered.&amp;#160;
        I say 'a couple' because it required two packages interacting in order to discover
        the real problem.
    &lt;/p&gt;
    &lt;p&gt;
        Basically a managed package derived from the base Package class in the VSIPHelper
        base class and also re-implemented the IOleCommandTarget interface.&amp;#160; This confuses
        the CLR interop code.&amp;#160; The most common effect of this is that the base class
        always gets called on the interface when called from unmanaged code. (The derived
        class implementation is never called).&amp;#160; The worst case could be that it is indeterminate
        if the base class will be called or the derived class.&amp;#160; 
    &lt;/p&gt;
    &lt;p&gt;
        The really bad thing is that there appeare to be&amp;#160;cases where the vtable offset
        of the interface appears to be cached.&amp;#160; So, depending on the behavior above,
        you could get random functions called since the vtable for derived objects could be
        different (depending on the class hierarchy).&amp;#160; The offset for one package not
        overriding the implementation is different than the offset for another package which
        does override the implementation.&amp;#160; If the first one to be called causes the offset
        to be stored.&amp;#160; The second one to be called loses because a random place in the
        vtable will be called.
    &lt;/p&gt;
    &lt;p&gt;
        The bottom line for VSIP developers is: Don't re-implement interfaces already implemented
        by a base class.&amp;#160;
    &lt;/p&gt;
    &lt;p&gt;
        In Everett Extras we provide a virtual method for each IOleCommandTarget method so
        that you can override the behavior of the base class and continue to rely on its implementation
        of the interface.
    &lt;/p&gt;
    &lt;p&gt;
        In VSI Everett Extras, if you find the need to override the base implementation of
        some other interface, but we don't provide a way like with IOleCommandTarget, please
        let me know.
    &lt;/p&gt;
    &lt;p&gt;
        Thanks, Allen
    &lt;/p&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=56807" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/allend/archive/tags/VSIP/default.aspx">VSIP</category><category domain="http://blogs.msdn.com/allend/archive/tags/Interop/default.aspx">Interop</category></item><item><title>Thursday PDC Report</title><link>http://blogs.msdn.com/allend/archive/2003/10/30/56806.aspx</link><pubDate>Thu, 30 Oct 2003 20:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:56806</guid><dc:creator>AllenD</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/allend/comments/56806.aspx</comments><wfw:commentRss>http://blogs.msdn.com/allend/commentrss.aspx?PostID=56806</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;p&gt;
        &lt;strong&gt;General comments at the end of the PDC&lt;/strong&gt; 
    &lt;/p&gt;
    &lt;p&gt;
        Boy am I tired. 
    &lt;/p&gt;
    &lt;p&gt;
        First, coming to these things requires like 14 hours of activity each day.&amp;#160; Add
        to that the fact that booth duty requires standing like 6 hours each day and I can't
        wait to get back to my desk! 
    &lt;/p&gt;
    &lt;p&gt;
        Second, I can't sleep without my wife.&amp;#160; Tonight I'm going to sleep like a baby. 
    &lt;/p&gt;
    &lt;p&gt;
        &lt;strong&gt;Tue PM&lt;/strong&gt; 
    &lt;/p&gt;
    &lt;p&gt;
        So I haven't had a chance to&amp;#160;blog for a while.&amp;#160; My apologies.&amp;#160; 
    &lt;/p&gt;
    &lt;p&gt;
        At the end of the last entry I indicated I was about to attend the Managed/Native
        Interop Birds of a Feather session 10-11 on Tue.&amp;#160; There was approximately 30-40
        of us there and Adam and Sonja hosted, taking suggestions for future features in the
        interop features of the CLR.&amp;#160; Lots of good suggestions.&amp;#160; One thing that
        was requested was a tool that would compare an IDL or TypeLib against an Interop Assembly.&amp;#160;
        Maybe I'll write one. 
    &lt;/p&gt;
    &lt;p&gt;
        &lt;strong&gt;Wed&lt;/strong&gt; 
    &lt;/p&gt;
    &lt;p&gt;
        I met some VSIP partners whom I'd never had a chance to meet.&amp;#160; LogicLibrary was
        very prominent at this show and they came by and chatted about Everett Extras.&amp;#160;
        Turns out it was John from LogicLibrary whom I'd actually helped over the phone to
        get their package to load.&amp;#160; Much thanks to John since that exercise worked the
        kinks out of the VSIPDev.com package load key generation process.&amp;#160; The email
        that you get from VSIPDev.com containing the key string and the instructions are much
        clearer now.&amp;#160; Our documentation folks are even working on a Walkthrough in this
        area that will really help VSIP partners to get their package load keys working correctly. 
    &lt;/p&gt;
    &lt;p&gt;
        Wed was less booth duty than previous days plus one&amp;#160;meeting with Intel.&amp;#160;
        All the rest of the day was less 'work' and more education/conference attendee stuff.&amp;#160;
        I&amp;#160;had the opportunity to attend Chris Anderson's session on Longhorn Application
        Fundamentals.&amp;#160; Longhorn apps&amp;#160;are very cool and easy to write.&amp;#160;&amp;#160;Some
        day, we'll&amp;#160;have to figure out how the next version of Visual Studio&amp;#160;should
        take advantage of the Longhorn features.&amp;#160; Another session I attended was the
        Peer-To-Peer Networking offerings being created for Longhorn (and some of this is
        available in XP service packs).&amp;#160; 
    &lt;/p&gt;
    &lt;p&gt;
        It's an interesting contrast in these two sessions.&amp;#160; In general the more exciting,
        well-received sessions seem to be&amp;#160;the one that showed lots of code, code being
        written and few power point slides.&amp;#160; BillG and the other keynotes didn't have
        a lot of code being written since they're presenting general direction and announcements,
        etc.&amp;#160; But in the individual sessions I feel that code, code, code is the thing.&amp;#160;
        I'll keep this in mind for my own customer presentations. 
    &lt;/p&gt;
    &lt;p&gt;
        &lt;strong&gt;Wed PM&lt;/strong&gt; 
    &lt;/p&gt;
    &lt;p&gt;
        Wed&amp;#160;night was the Attendee Party at Universal Studios.&amp;#160; It was really cool
        and everything was&amp;#160;free.&amp;#160; I met up with my friend Bill and one of his co-workers
        (David) and we went to the Mummy Returns, Backdraft and the&amp;#160;Back to the Future
        Ride.&amp;#160; That's about all the time we had.&amp;#160; 
    &lt;/p&gt;
    &lt;p&gt;
        One humorous point was an escalator ride where Don Box was getting the group around
        to chant something.&amp;#160; Here's my script from the event: 
    &lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;
            Don: Okay everyone on 3, "Linux Sucks", 1...., 2...., 3.... 
        &lt;/li&gt;
        &lt;li&gt;
            Crowd: "Linux Sucks" (Laughter) 
        &lt;/li&gt;
        &lt;li&gt;
            Guy behind me: "Who was that weirdo?" 
        &lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;
        Shortly after this Chris Anderson was getting the crowd to 'whoop' it up. 
    &lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;
            Chris: "Come on everyone. Hoo, hoo, hoo!" 
        &lt;/li&gt;
        &lt;li&gt;
            Guy beind me: "Man, what is going on around here?" 
        &lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;
        I guess those two were really happy their sessions were done and they could relax.&amp;#160;
        Seriously though, they were both great presenters.&amp;#160; Any time you get a chance
        to listen to either or both of them, you should take advantage of the opportunity. 
    &lt;/p&gt;
    &lt;p&gt;
        &lt;strong&gt;Thurs AM&lt;/strong&gt; 
    &lt;/p&gt;
    &lt;p&gt;
        I got back to the convention center this morning and finally got my Attendee bag.&amp;#160;
        Microsoft employees, even if paying full conference fee, weren't given the conference
        bag or materials (CDs with Longhorn, etc) when we checked in.&amp;#160; We deferred to&amp;#160;real
        customers, given the fact that this conference was sold out (we didn't want to run
        out of materials for everyone else). 
    &lt;/p&gt;
    &lt;p&gt;
        After that I wanted to attend the Longhorn panel discussion, but there was no room
        in the hall and little room outside.&amp;#160; I continued on to the CLR Internals discussion.&amp;#160;
        Luminaries sitting on stage holding court musing on memory models, architecture &amp;amp;
        platforms, language syntax, programming paradigms and where the CLR is headed.&amp;#160;
        Very informative, but I must confess I started typing this blog entry and, like&amp;#160;very
        bad laptop users I didn't pay much attention. 
    &lt;/p&gt;
    &lt;p&gt;
        &lt;strong&gt;Goodbye LA, smog, fires, (really bad) traffic (compared to Seattle), ...&lt;/strong&gt; 
    &lt;/p&gt;
    &lt;p&gt;
        Now I'm heading to the airport, home, my family and bed.&amp;#160; Catch you later... 
    &lt;/p&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=56806" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/allend/archive/tags/VSIP/default.aspx">VSIP</category><category domain="http://blogs.msdn.com/allend/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/allend/archive/tags/PDC/default.aspx">PDC</category></item><item><title>Tue Report</title><link>http://blogs.msdn.com/allend/archive/2003/10/29/56805.aspx</link><pubDate>Wed, 29 Oct 2003 07:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:56805</guid><dc:creator>AllenD</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/allend/comments/56805.aspx</comments><wfw:commentRss>http://blogs.msdn.com/allend/commentrss.aspx?PostID=56805</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;strong&gt;Mon Night&lt;/strong&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = 
"urn:schemas-microsoft-com:office:office" /&gt;
        &lt;o:p&gt;&amp;#160;&lt;/o:p&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        Monday night we had a reception in the Expo Hall and there were a lot of people around.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;We
        gave out a bunch of VSIP t-shirts and VSIP 2003 SDK bits, including the Everett Extras
        bits.
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;o:p&gt;&amp;#160;&lt;/o:p&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        We continue to have some really interested customers who are learning of the new VSIP
        (it&amp;#8217;s free now) for the first time.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;There
        are also a number of customers who are learning, for the first time, that the beta
        of Everett Extras is available publicly.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;We
        had one customer come by and I showed him how easy it was to incorporate a .NET User
        Control into a VS Tool Window.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;He was
        totally enthusiastic at how easy it was to accomplish.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;This
        gave me the opportunity to demonstrate the beta wizard for generating a VSIP package.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;I&amp;#8217;m
        really excited about Everett Extras and the whole VSIP team (especially the developers
        whom I work closely with) should be very proud of what&amp;#8217;s being done to enable customers
        to solve problems and integrate their really neat features into VS.
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;o:p&gt;&amp;#160;&lt;/o:p&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;strong&gt;Tue AM&lt;/strong&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;o:p&gt;&amp;#160;&lt;/o:p&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        I sat in on Eric Rudder&amp;#8217;s keynote.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;The
        audience was very enthusiastic about new features in VB, ASP.NET, Smart Devices and
        other newly announced products that integrate into VS.
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;o:p&gt;&amp;#160;&lt;/o:p&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        I did more booth duty this morning after the keynote and things have definitely slowed
        down.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;We got rid of the t-shirts and
        now only the most serious of customers are dropping by.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;With
        nothing free to give away, except a CD with SDK bits, people aren&amp;#8217;t as interested
        in hearing about VSIP and VS Extensibility.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;It
        is good, however, to get the serious questions and have time to actually demo some
        of the bits for potential and existing partners.
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;o:p&gt;&amp;#160;&lt;/o:p&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;strong&gt;Tue Noon&lt;/strong&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;o:p&gt;&amp;#160;&lt;/o:p&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        I sat in on &lt;a href="http://blogs.gotdotnet.com/anathan/"&gt;Adam Nathan&lt;/a&gt;&amp;#160;and
        Sonja Keserovic for their session on Managed/Native Interoperability.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;Adam
        literally wrote the book on this topic.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;He
        was giving his book away with signature for lucky attendees who answers certain quiz
        questions correctly.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;(For the record,
        I could answer these, but I held back for the benefit of real customers.)&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;This
        was a great talk and it got me thinking that we&amp;#8217;ve got more work to do in VSIP to
        make sure that we don&amp;#8217;t fall into the traps that were demonstrated in the session
        and to make it easy for our VSIP partners to avoid them as well.
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;o:p&gt;&amp;#160;&lt;/o:p&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        After this I went back to the booth and answered questions, demo&amp;#8217;d EvEx some more
        and generally couldn&amp;#8217;t wait to get off my feet.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;o:p&gt;&amp;#160;&lt;/o:p&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        We had the opportunity to sample some of the fine steak of downtown LA.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;Craig,
        Ken, Doug, Tom, Chris and my good friend Bill took a ride to one of the local establishments
        and enjoyed a nice dinner.
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&amp;#160;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;strong&gt;Tue PM&lt;/strong&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;o:p&gt;&amp;#160;&lt;/o:p&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        After dinner, Ken, Doug and I went to meet with an existing partner to demo their
        upcoming product and to talk about possible future directions.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;It
        was a good demo and they&amp;#8217;ve got a great product.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;I
        wish I could say more, but you&amp;#8217;ll just have to wait &amp;#8216;til they go to market with this
        and then I&amp;#8217;ll include more here.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;o:p&gt;&amp;#160;&lt;/o:p&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        The hotel we went to was the Standard Hotel in LA.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;The
        sign outside the hotel was upside down.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;I
        had a feeling this was anything but &amp;#8216;standard&amp;#8217;.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;Inside
        (on the 5&amp;#8217;th floor at least) we found room labels that said &amp;#8220;My name is: 503&amp;#8221; instead
        of the traditional &amp;#8220;Room 503&amp;#8221;.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;There
        were also is labels on the stairs that said, you guessed it, &amp;#8220;My name is: stairs&amp;#8221;.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;One
        of the rooms had been hastily converted to a &amp;#8220;conference room&amp;#8221;.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;The
        bed was still there as well as the funky modern furniture.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;The
        shower had no door and it was a completely white room (tile, furniture, fixtures,
        bedding, walls, everything).&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;It felt
        more sterile than a hospital.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;I was happy
        to get out of there and will never stay there when I travel, that's for sure.&amp;#160;
        Maybe some people like that kind of thing, but it was fairly bad in my opinion.
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;o:p&gt;&amp;#160;&lt;/o:p&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        I finally made it back to the Convention Center with only 30 minutes left in the Ask
        The Experts session, but managed to learn of some cool Whidbey bugs customers have
        found and talk to some customers about Extensibility and VSIP.
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;o:p&gt;&amp;#160;&lt;/o:p&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        I took the opportunity to introduce myself to Adam and Sonja whom I have exchanged
        some emails with, but have never actually said &amp;#8216;hello&amp;#8217; to.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;I&amp;#8217;m
        sitting in the Tools &amp;amp; Languages Lounge now, waiting for the Birds of a Feature
        session on Managed/Native Interop to see what&amp;#8217;s going on with others who do the same
        things that my team does.
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;o:p&gt;&amp;#160;&lt;/o:p&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;strong&gt;Fires&lt;/strong&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        &lt;o:p&gt;&amp;#160;&lt;/o:p&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;
        This morning I looked at the TV News and it looked pretty grim.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;The
        fires are still spreading and threatening even more populated areas.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;The
        smoke &amp;amp; haze outside the Convention Center was even worse today than yesterday.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;I
        estimate visibility to be less than 1 miles.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;No
        one on the streets seemed to be alarmed at this.&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;SoCal
        attitude I suppose.
    &lt;/p&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=56805" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/allend/archive/tags/VSIP/default.aspx">VSIP</category><category domain="http://blogs.msdn.com/allend/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/allend/archive/tags/PDC/default.aspx">PDC</category></item><item><title>VS Dialog font and dying my hair, maybe</title><link>http://blogs.msdn.com/allend/archive/2003/10/24/56803.aspx</link><pubDate>Sat, 25 Oct 2003 03:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:56803</guid><dc:creator>AllenD</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/allend/comments/56803.aspx</comments><wfw:commentRss>http://blogs.msdn.com/allend/commentrss.aspx?PostID=56803</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;p&gt;
        &lt;strong&gt;Preparations&lt;/strong&gt; 
    &lt;/p&gt;
    &lt;p&gt;
        I'm in the mode where everything needs to get done before I can leave.&amp;#160; Don't
        you hate that mode?!&amp;#160; It's like going on a long vacation.&amp;#160; You get extra
        productive making sure everything is OK before you leave.&amp;#160; If only I could work
        this way everyday! 
    &lt;/p&gt;
    &lt;p&gt;
        &lt;strong&gt;Giving Campaign&lt;/strong&gt; 
    &lt;/p&gt;
    &lt;p&gt;
        Well, my Product Unit (Visual Studio Core) may just win for the Giving Campaign Challenge.&amp;#160;
        Remember, if 80% participate in this year's campaign, I said I'd dye my hair.&amp;#160;
        The deadline was extended and it's looking grim for my dark brown hair.&amp;#160; As of
        today they've reached 59%.&amp;#160; At this pace, they'll win for sure.&amp;#160; I'll keep
        you posted here. 
    &lt;/p&gt;
    &lt;p&gt;
        &lt;strong&gt;VS dialog font from managed code&lt;/strong&gt; 
    &lt;/p&gt;
    &lt;p&gt;
        An internal MS integrator posted this question: 
    &lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;
            &lt;div class="MsoNormal"&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I
                have a managed package, where I'd like to reflect the font selected in the shell for
                Toolwindows and Dialogs into my package's toolwindows.&amp;#160; &lt;/span&gt;&lt;/font&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Using
                the interop assemblies for the Shell, there is a QueryService to get an IUIHostLocale,
                which then has a GetDialogFont method.&amp;#160; My question is how do I transform the
                resulting UIDLGLOGFONT into a managed System::Drawing::Font object.&amp;#160; The static
                System::Drawing::Font::FromLogFont throws an invalid arg exception if I try to use
                it.&amp;#160; Anyone got any advice?&lt;O:P&gt;&lt;/O:P&gt;
                &lt;/span&gt;&lt;/font&gt;
            &lt;/div&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;
        Here's how&amp;#160;to do this using the VSIP SDK from Everett Extras: 
    &lt;/p&gt;
    &lt;p class="MsoNormal"&gt;
        &lt;font face="Arial" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Use
        the LOGFONT struct out of the NativeMethods namespace in the VSIP Helper classes,&amp;#160;filling
        in that struct with the info you get from the IUIHostLocale::GetDialogFont method.&amp;#160;
        Then use the .NET Framework's Font.FromLogFont method to create a Font object for your use.&lt;/span&gt;&lt;/font&gt; 
        &lt;O:P&gt;&lt;/O:P&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal"&gt;
        &lt;font face="Arial" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Here's
        some code (I've not compiled, but it is close to what is expected to work):&lt;/span&gt;&lt;/font&gt; 
        &lt;O:P&gt;&lt;/O:P&gt;
    &lt;/p&gt;
    &lt;p class="MsoNormal"&gt;
        &lt;font face="Arial" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&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;
        IUIHostLocale locale = (IUIHostLocale) GetService(typeof(IUIHostLocale));&lt;br /&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;
        if (locale != null) {&lt;br /&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;
        UIDLGLOGFONT[] fArray = new UIDLGLOGFONT[1];&lt;br /&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;
        locale.GetDialogFont(fArray);&lt;br /&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;
        UIDLGLOGFONT font = fArray[0];&lt;/span&gt;&lt;/font&gt; 
        &lt;O:P&gt;&lt;/O:P&gt;
    &lt;/p&gt;
    &lt;div&gt;
        &lt;p class="MsoNormal"&gt;
            &lt;font face="Times New Roman" size="3"&gt;&lt;span style="FONT-SIZE: 12pt"&gt;
            &lt;O:P&gt;&lt;/O:P&gt;
            &lt;/span&gt;&lt;/font&gt;
        &lt;/p&gt;
    &lt;/div&gt;
    &lt;p class="MsoNormal"&gt;
        &lt;font face="Arial" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&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;
        // Convert the face name from ushort[32] to string&lt;br /&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;
        StringBuilder sb = new StringBuilder();&lt;br /&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;
        int ch = 0;&lt;br /&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;
        while (ch &amp;lt; 32) {&lt;br /&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;
        ushort charVal = font.lfFaceName[ch];&lt;br /&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;
        if (charVal == 0) {&lt;br /&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;
        break;&lt;br /&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;
        }&lt;br /&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;
        sb.Append((char)charVal);&lt;br /&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;
        ch++;&lt;br /&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;
        }&lt;br /&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;
        if (sb.Length == 0) {&lt;br /&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;
        Debug.Fail("Unable to get face name of VS dialog font.");&lt;br /&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;
        }&lt;/span&gt;&lt;/font&gt; 
        &lt;O:P&gt;&lt;/O:P&gt;
    &lt;/p&gt;
    &lt;div&gt;
        &lt;p class="MsoNormal"&gt;
            &lt;font face="Times New Roman" size="3"&gt;&lt;span style="FONT-SIZE: 12pt"&gt;
            &lt;O:P&gt;&lt;/O:P&gt;
            &lt;/span&gt;&lt;/font&gt;
        &lt;/p&gt;
    &lt;/div&gt;
    &lt;p class="MsoNormal"&gt;
        &lt;font face="Arial" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&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;
        // Copy one LOGFONT to the other...&lt;br /&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;
        NativeMethods.LOGFONT lfAuto = new NativeMethods.LOGFONT();&lt;br /&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;
        lfAuto.lfHeight = font.lfHeight;&lt;br /&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;
        lfAuto.lfWidth = font.lfWidth;&lt;br /&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;
        lfAuto.lfEscapement = font.lfEscapement;&lt;br /&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;
        lfAuto.lfOrientation = font.lfOrientation;&lt;br /&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;
        lfAuto.lfWeight = font.lfWeight;&lt;br /&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;
        lfAuto.lfItalic = font.lfItalic;&lt;br /&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;
        lfAuto.lfUnderline = font.lfUnderline;&lt;br /&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;
        lfAuto.lfStrikeOut = font.lfStrikeOut;&lt;br /&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;
        lfAuto.lfCharSet = font.lfCharSet;&lt;br /&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;
        lfAuto.lfOutPrecision = font.lfOutPrecision;&lt;br /&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;
        lfAuto.lfClipPrecision = font.lfClipPrecision;&lt;br /&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;
        lfAuto.lfQuality = font.lfQuality;&lt;br /&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;
        lfAuto.lfPitchAndFamily = font.lfPitchAndFamily;&lt;br /&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;
        lfAuto.lfFaceName = sb.ToString();&lt;/span&gt;&lt;/font&gt; 
        &lt;O:P&gt;&lt;/O:P&gt;
    &lt;/p&gt;
    &lt;div&gt;
        &lt;p class="MsoNormal"&gt;
            &lt;font face="Times New Roman" size="3"&gt;&lt;span style="FONT-SIZE: 12pt"&gt;
            &lt;O:P&gt;&lt;/O:P&gt;
            &lt;/span&gt;&lt;/font&gt;
        &lt;/p&gt;
    &lt;/div&gt;
    &lt;p class="MsoNormal"&gt;
        &lt;font face="Arial" size="2"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&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;
        try {&lt;br /&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;object
        dialogFont = Font.FromLogFont(lfAuto);&lt;br /&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;
        }&lt;br /&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;
        catch (ArgumentException) {&lt;br /&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;
        }&lt;/span&gt;&lt;/font&gt; 
    &lt;/p&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=56803" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/allend/archive/tags/VSIP/default.aspx">VSIP</category><category domain="http://blogs.msdn.com/allend/archive/tags/Interop/default.aspx">Interop</category></item><item><title>VS7.1 VSIP Extras Beta is available</title><link>http://blogs.msdn.com/allend/archive/2003/10/17/56794.aspx</link><pubDate>Sat, 18 Oct 2003 02:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:56794</guid><dc:creator>AllenD</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/allend/comments/56794.aspx</comments><wfw:commentRss>http://blogs.msdn.com/allend/commentrss.aspx?PostID=56794</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;p&gt;
        &lt;strong&gt;VSIP Extras SDK Beta&lt;/strong&gt; 
    &lt;/p&gt;
    &lt;p&gt;
        The VSIP Extras SDK Beta (additional bits that work with the VS7.1 VSIP SDK) is now
        available.&amp;#160; Visit &lt;a href="http://www.vsipdev.com"&gt;www.vsipdev.com&lt;/a&gt; to get
        it. 
    &lt;/p&gt;
    &lt;p&gt;
        This release of the SDK includes 4 major things: 
    &lt;/p&gt;
    &lt;ol&gt;
        &lt;li&gt;
            Visual Studio Interop Assemblies - enables managed code to call native interfaces
            and implement interfaces called by managed code. 
        &lt;/li&gt;
        &lt;li&gt;
            A&amp;#160;set of simple helper classes that implement the basic functionality of a VS
            Package.&amp;#160; You extend these base classes for your package.&amp;#160;&amp;#160;This includes
            some helpers classes for Tool Windows, Selection Container adapter, Registration Attribute
            Classes, a Registration utility &amp;amp; more. 
        &lt;/li&gt;
        &lt;li&gt;
            Wizard to generate VS Packages including Language Services (limited since we may not
            know your grammar). 
        &lt;/li&gt;
        &lt;li&gt;
            Updated documentation including functions reference for the managed interfaces as
            well as information on how to use the helper classes and registration utility. 
        &lt;/li&gt;
    &lt;/ol&gt;
    &lt;p&gt;
        VS Automation&amp;#160;allowing macros and add-ins as well as driving VS via the DTE automation
        model are really cool features.&amp;#160; I think this is&amp;#160;one of the strengths of
        the IDE in that any user can&amp;#160;easily&amp;#160;do something custom they want to do.&amp;#160;
        With VSIP you can now extend the IDE even more deeply by creating your own Project
        Systems, Editors, Designers and Language Services,&amp;#160;as well as Tool Windows (VS
        Automation already does this fairly well though). 
    &lt;/p&gt;
    &lt;p&gt;
        And this is all free with the new VSIP program.&amp;#160; There are ways to pay more if
        you want marketing involvement, but the free program is great to get started. 
    &lt;/p&gt;
    &lt;p&gt;
        &lt;strong&gt;PDC&lt;/strong&gt; 
    &lt;/p&gt;
    &lt;p&gt;
        Several of us from Visual Studio will be at the &lt;a href="http://msdn.microsoft.com/events/pdc/"&gt;PDC&lt;/a&gt; talking
        about VSIP.&amp;#160; Come by our trade show booth for more information and cool swag!&amp;#160;
        See you there. 
    &lt;/p&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=56794" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/allend/archive/tags/VSIP/default.aspx">VSIP</category><category domain="http://blogs.msdn.com/allend/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.msdn.com/allend/archive/tags/Interop/default.aspx">Interop</category></item><item><title>Managed code rocks!</title><link>http://blogs.msdn.com/allend/archive/2003/10/17/56792.aspx</link><pubDate>Fri, 17 Oct 2003 08:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:56792</guid><dc:creator>AllenD</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/allend/comments/56792.aspx</comments><wfw:commentRss>http://blogs.msdn.com/allend/commentrss.aspx?PostID=56792</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;p&gt;
        So, my team is working on the VSIP Everett Extras&amp;#160;release of the VSIP SDK.&amp;#160;
        We have a beta about to be released.&amp;#160; Someone using an early release of this
        beta commented: 
    &lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;
            I had a working C# WinForms project already and I was able to generate a VSIP Project
            using the wizard, copy and paste the various controls and supporting code, and get
            a working VS Tool window in under 2 hours! Within 6 hours, I had some advanced stuff
            working, including use of the new SelectionContainer helper class. And I have never
            done a line of VSIP code before today (though I have done a little reading of SDK
            docs over the past few weeks).&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;
        Pretty sweet if you ask me!
    &lt;/p&gt;
&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=56792" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/allend/archive/tags/VSIP/default.aspx">VSIP</category><category domain="http://blogs.msdn.com/allend/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.msdn.com/allend/archive/tags/Interop/default.aspx">Interop</category></item><item><title>Case sensitivities</title><link>http://blogs.msdn.com/allend/archive/2003/10/16/56791.aspx</link><pubDate>Fri, 17 Oct 2003 01:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:56791</guid><dc:creator>AllenD</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/allend/comments/56791.aspx</comments><wfw:commentRss>http://blogs.msdn.com/allend/commentrss.aspx?PostID=56791</wfw:commentRss><description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;So my team produces Interop Assemblies for Visual Studio.  Chris on my team does a great job maintaining a set of monster perl scripts and a batch file that processes IDL's into TLB's into Interop Assemblies.  Most people just recommend using TLBIMP on the TLB, but for nasty interfaces which violate OLE Automation rules, you have to muck with the IL directly.  (More on this in a future entry.)&lt;/p&gt; 
  &lt;p&gt;So we use MIDL, TLBIMP, ILDASM &amp; ILASM + those perl scripts to create assemblies for interop for the VS interfaces.  Great in theory, but the devil is in the details.&lt;/p&gt; 
  &lt;p&gt;There's a strange behavior in MIDL (&amp; TLBIMP also possibly) where the case of some names change during compilation.  For instance in the IDL you might have:&lt;/p&gt; 
  &lt;p&gt;interace IFoo : IUnknown &lt;/p&gt; 
  &lt;p&gt;{&lt;/p&gt; 
  &lt;p&gt;    HRESULT GetFoobar([out, retval] BSTR * pbstrFoobar);&lt;/p&gt; 
  &lt;p&gt;}&lt;/p&gt; 
  &lt;p&gt;In the TLB after TLBIMP you might have:&lt;/p&gt; 
  &lt;p&gt;IFoo.GetFooBar&lt;/p&gt; 
- &lt;p&gt;
  Yes, that's right IFoo.GetFoo 
  &lt;strong&gt;B&lt;/strong&gt; 
  ar (as in CAPITAL "B")! 
  &lt;/p&gt;
  &lt;p&gt;and in the Interop Assembly, of course we end up with:&lt;/p&gt; 
  &lt;p&gt;IFoo.GetFooBar&lt;/p&gt; 
  &lt;p&gt;So I was implementing IFoo.GetFoobar in my managed code and it all worked great.  I changed some things that are unrelated to the interface and method names and bang!  Now the C# compiler is complaining that I haven't implemented IFoo.GetFooBar.  Things like this really are difficult to find since it appears that something else was wrong (like missing references).  Hey, why can't the C# compiler complain that there's a problem, notice a similar method only differing by case and mention this as a possible cause? &lt;/p&gt; 
  &lt;p&gt;Maybe I'll switch to VB.&lt;/p&gt; 

&lt;/body&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=56791" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/allend/archive/tags/Interop/default.aspx">Interop</category></item></channel></rss>