<?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>Beth Massi - Sharing the goodness that is VB : Interop Toolkit</title><link>http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx</link><description>Tags: Interop Toolkit</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>What is Microsoft’s Visual Basic 6 Support Strategy?</title><link>http://blogs.msdn.com/bethmassi/archive/2009/09/14/what-is-microsoft-s-visual-basic-6-support-strategy.aspx</link><pubDate>Tue, 15 Sep 2009 03:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9895199</guid><dc:creator>Beth Massi</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/9895199.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=9895199</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=9895199</wfw:comment><description>&lt;P&gt;I just posted &lt;A href="http://channel9.msdn.com/posts/funkyonex/What-is-Microsofts-Visual-Basic-6-Support-Strategy" target=_blank mce_href="http://channel9.msdn.com/posts/funkyonex/What-is-Microsofts-Visual-Basic-6-Support-Strategy"&gt;an interview on Channel 9 with Paul Yuknewicz&lt;/A&gt;, Lead Program Manager on the Visual Studio team. Paul discusses Visual Basic 6 runtime and IDE support options as well as proven techniques, tools and best practices for interoperability and gradual, phased migration to .NET. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://channel9.msdn.com/posts/funkyonex/What-is-Microsofts-Visual-Basic-6-Support-Strategy" target=_blank mce_href="http://channel9.msdn.com/posts/funkyonex/What-is-Microsofts-Visual-Basic-6-Support-Strategy"&gt;&lt;STRONG&gt;Channel 9 Interview: What is Microsoft's Visual Basic 6 Support Strategy?&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/vbrun/ms788708.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/vbrun/ms788708.aspx"&gt;Read the Official Support Statement on Windows 7, Windows Vista, and Windows XP&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/vbrun/ms788233.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/vbrun/ms788233.aspx"&gt;&lt;IMG style="MARGIN: 0px 10px 0px 0px; DISPLAY: inline" border=none align=left src="http://i.msdn.microsoft.com/ms788233.VB6_diagram400(en-us).png" mce_src="http://i.msdn.microsoft.com/ms788233.VB6_diagram400(en-us).png"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Today we also updated the the &lt;A href="http://msdn.microsoft.com/en-us/vbrun/default.aspx" mce_href="http://msdn.microsoft.com/en-us/vbrun/default.aspx"&gt;&lt;STRONG&gt;Visual Basic 6 Resource Center&lt;/STRONG&gt;&lt;/A&gt; with better navigation, Visual Basic 6 &lt;A href="http://msdn.microsoft.com/en-us/vbrun/ee410535.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/vbrun/ee410535.aspx"&gt;samples and components&lt;/A&gt;, &lt;A href="http://msdn.microsoft.com/en-us/vbrun/aa662927.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/vbrun/aa662927.aspx"&gt;important downloads&lt;/A&gt;, as well as &lt;A href="http://msdn.microsoft.com/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn.microsoft.com/vbasic/bb419144.aspx"&gt;migration tools&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/vbrun/cc297223.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/vbrun/cc297223.aspx"&gt;training&lt;/A&gt; mentioned in the interview. &lt;/P&gt;
&lt;P&gt;Please visit the &lt;A href="http://msdn.microsoft.com/en-us/vbrun/ms788233.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/vbrun/ms788233.aspx"&gt;Visual Basic 6 Migration&lt;/A&gt; page for information on how to plan and execute a gradual, phased migration to .NET. &lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9895199" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Community/default.aspx">Community</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VB6/default.aspx">VB6</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx">Interop Toolkit</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/DevCenter/default.aspx">DevCenter</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Channel9/default.aspx">Channel9</category></item><item><title>I Survived TechEd</title><link>http://blogs.msdn.com/bethmassi/archive/2008/06/09/i-survived-teched.aspx</link><pubDate>Tue, 10 Jun 2008 02:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8587808</guid><dc:creator>Beth Massi</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/8587808.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=8587808</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=8587808</wfw:comment><description>&lt;P&gt;I feel like I need a T-shirt that says "I survived TechEd". It was my first time at &lt;A href="http://www.microsoft.com/events/teched2008/developer/default.mspx" target=_blank mce_href="http://www.microsoft.com/events/teched2008/developer/default.mspx"&gt;TechEd&lt;/A&gt; and no one can really prepare you for how much work and play takes place at a huge conference like that. I had a BLAST. Our VB6 to .NET migration talks went well but I think by far the most fun was working the Visual Studio booths (so much so that I stayed longer there than I signed up for). I also did a &lt;A href="http://www.dotnetrocks.com/" target=_blank mce_href="http://www.dotnetrocks.com/"&gt;.Net Rocks!&lt;/A&gt; show on VB XML Literals (I'll let you know when it goes live) and hung out at the MSDN booths for a bit playing with the new &lt;A href="http://blogs.msdn.com/bethmassi/archive/2008/05/30/check-it-out-vb-social-bookmarks.aspx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/archive/2008/05/30/check-it-out-vb-social-bookmarks.aspx"&gt;Social Bookmarks and Feeds&lt;/A&gt;. Oh yea, and lots and lots of parties (I'm pretty good at those ;-)) Lessons Learned: Next time bring more business cards. I ran out the second day!&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Booth "Duty"&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I say duty but manning the booth really didn't feel like a chore at all. The most fun I always have is talking to people about what they work on, then trying to understand their business challenges and hearing what technology decisions they've made. Most folks I spoke with were government employees (agriculture, energy, defense, and a couple people building applications for local police as well). Other folks were building or maintaining departmental applications in large corporations. Fun stuff.&lt;/P&gt;
&lt;P&gt;It was also great to hear that most people I spoke with had &lt;A href="http://www.microsoft.com/express/vb/default.aspx" target=_blank mce_href="http://www.microsoft.com/express/vb/default.aspx"&gt;downloaded&lt;/A&gt; and were starting to use Visual Studio 2008. There was lots of great feedback here especially related to IntelliSense and of course &lt;A href="http://msdn.microsoft.com/en-us/library/bb385100.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/bb385100.aspx"&gt;LINQ&lt;/A&gt;. Many people wanted me to show them how to do something in LINQ as it seemed that they were still trying to get their heads around it all. Some people I spoke with didn't realize that LINQ isn't just for accessing data in a database. LINQ is a way to query &lt;EM&gt;&lt;STRONG&gt;any&lt;/STRONG&gt;&lt;/EM&gt; collection, be that in-memory objects, XML, or even over in-memory DataSets. &lt;/P&gt;
&lt;P&gt;I think my favorite moment was when I worked with a developer that was trying to search an XML document using the XML DOM and we moved the code to &lt;A href="http://msdn.microsoft.com/en-us/library/bb384460.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/bb384460.aspx"&gt;LINQ to XML&lt;/A&gt; and queried it using one LINQ statement -- thus eliminating more than a page full of code. I also showed XML IntelliSense in VB by including a schema in the project. I pointed people to the &lt;A href="http://msdn.com/vbasic/downloads" target=_blank mce_href="http://msdn.com/vbasic/downloads"&gt;downloads section&lt;/A&gt; of the &lt;A href="http://msdn.com/vbasic" target=_blank mce_href="http://msdn.com/vbasic"&gt;Visual Basic Developer Center&lt;/A&gt; to install the &lt;A href="http://msdn.microsoft.com/en-us/vbasic/bb840042.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/vbasic/bb840042.aspx"&gt;XML to Schema&lt;/A&gt; tool which automatically infers the schema of XML data. It'll be good to get this tool baked into &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=CF99C752-1391-4BC3-BABC-86BC0B9E8E5A&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=CF99C752-1391-4BC3-BABC-86BC0B9E8E5A&amp;amp;displaylang=en"&gt;SP1&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;There were also a lot of good discussions at the booth on LINQ to relational data (SQL, Entities, DataSets) and which approach is best in what scenarios. I got a couple "not another data access technology" vibes but once I explained them as options on top of ADO.NET rather than replacements I think people were more at ease. I showed a few people how you can take advantage of LINQ without having to re-architect your data access layer at all. I also pointed people who know T-SQL but are trying to learn LINQ to a series of blog posts the VB Team is putting together on "&lt;A href="http://blogs.msdn.com/vbteam/archive/tags/Converting+SQL+to+LINQ/default.aspx" target=_blank mce_href="http://blogs.msdn.com/vbteam/archive/tags/Converting+SQL+to+LINQ/default.aspx"&gt;Converting SQL to LINQ&lt;/A&gt;" that show translations of a variety of statements and scenarios.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;VB6 to .NET Migration Talks&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The VB6 to .NET Migration topic had a great turnout. What was a bit surprising is that even though the &lt;A href="http://msdn.microsoft.com/en-us/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit&lt;/A&gt; has been out for more than a year, it was news to almost everyone. Folks planning a phased migration should really get the &lt;A href="http://msdn.microsoft.com/en-us/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Toolkit&lt;/A&gt; and the &lt;A href="http://msdn.microsoft.com/en-us/vbasic/bb735936.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/vbasic/bb735936.aspx"&gt;Power Packs&lt;/A&gt; into their arsenal.&lt;/P&gt;
&lt;P&gt;This topic had two sessions that I did with &lt;A href="http://msmvps.com/blogs/windsor/default.aspx" target=_blank mce_href="http://msmvps.com/blogs/windsor/default.aspx"&gt;Rob Windsor&lt;/A&gt; (VB MVP) and &lt;A href="http://blogs.msdn.com/vbteam/archive/tags/Paul+Yuknewicz/default.aspx" target=_blank mce_href="http://blogs.msdn.com/vbteam/archive/tags/Paul+Yuknewicz/default.aspx"&gt;Paul Yuknewicz&lt;/A&gt; (colleague at Microsoft). We did one TLC in an "interactive theater" located on the trade show floors as well as one "birds-of-a-feather" (BOF) discussion. The TLC we presented in similar format to the &lt;A href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=en-US&amp;amp;EventID=1032371438&amp;amp;CountryCode=US" target=_blank mce_href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=en-US&amp;amp;EventID=1032371438&amp;amp;CountryCode=US"&gt;Webcast I did with Rob that you can view here&lt;/A&gt;. The BOF was really more of an interactive discussion and the group had some great challenges and we addressed many architectural options for migration. The discussion also included a couple great folks from &lt;A href="http://www.artinsoft.com/pr_vbcompanion.aspx" target=_blank mce_href="http://www.artinsoft.com/pr_vbcompanion.aspx"&gt;ArtinSoft&lt;/A&gt; who provide migration tools and consulting.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;VB6 to .NET Migration resources:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Developer Centers: &lt;A href="http://msdn.com/vbrun" target=_blank mce_href="http://msdn.com/vbrun"&gt;Visual Basic 6&lt;/A&gt;, &lt;A href="http://msdn.com/vbasic" target=_blank mce_href="http://msdn.com/vbasic"&gt;Visual Basic.NET&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit&lt;/A&gt; (check out resources &lt;A href="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx"&gt;here&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/vbasic/bb466226.aspx#interop" target=_blank mce_href="http://msdn.microsoft.com/en-us/vbasic/bb466226.aspx#interop"&gt;here&lt;/A&gt; as well)&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn2.microsoft.com/en-us/vbasic/bb735936.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/bb735936.aspx"&gt;Visual Basic PowerPacks&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=10C491A2-FC67-4509-BC10-60C5C039A272&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=10C491A2-FC67-4509-BC10-60C5C039A272&amp;amp;displaylang=en"&gt;Assessment Tool&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a656371a-b5c0-4d40-b015-0caa02634fae&amp;amp;DisplayLang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a656371a-b5c0-4d40-b015-0caa02634fae&amp;amp;DisplayLang=en"&gt;Code Advisor&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Free PAG Guide: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=7C3FE0A9-CBED-485F-BFD5-847FB68F785D&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=7C3FE0A9-CBED-485F-BFD5-847FB68F785D&amp;amp;displaylang=en"&gt;Upgrading Visual Basic 6.0 Applications to Visual Basic .NET&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Book: &lt;A href="http://www.microsoft.com/mspress/books/5699.aspx" target=_blank mce_href="http://www.microsoft.com/mspress/books/5699.aspx"&gt;Upgrading Microsoft® Visual Basic® 6.0 to Microsoft Visual Basic .NET&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;ArtinSoft: &lt;A href="http://www.artinsoft.com/pr_vbcompanion.aspx" target=_blank mce_href="http://www.artinsoft.com/pr_vbcompanion.aspx"&gt;VB6 to .NET Migration Tool&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8587808" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Speaking/default.aspx">Speaking</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Community/default.aspx">Community</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VB6/default.aspx">VB6</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx">Interop Toolkit</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/DevCenter/default.aspx">DevCenter</category></item><item><title>DevTeach - Last Day</title><link>http://blogs.msdn.com/bethmassi/archive/2008/05/16/devteach-last-day.aspx</link><pubDate>Fri, 16 May 2008 18:19:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8513459</guid><dc:creator>Beth Massi</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/8513459.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=8513459</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=8513459</wfw:comment><description>&lt;p&gt;Thursday: Okay I know it's Friday but I was the last session of the day yesterday and I didn't have time to post afterwards (I'll tell you why in a minute).&lt;/p&gt; &lt;p&gt;My duet session with &lt;a href="http://msmvps.com/blogs/windsor/Default.aspx" target="_blank"&gt;Rob Windsor&lt;/a&gt; was on VB6 to .NET Migration. We're going to take this one to TechEd this year as well. We've also done a webcast on this too &lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=en-US&amp;amp;EventID=1032371438&amp;amp;CountryCode=US" target="_blank"&gt;that you can watch here&lt;/a&gt;. There weren't too many people in this one but it's always hard when you are the last session of the last day of a conference. Even though I was slightly burned out I think the talk went really well (at least the evals said so). &lt;/p&gt; &lt;p&gt;&lt;img src="http://blogs.msdn.com/photos/bethmassi/images/8513414/original.aspx"&gt; &lt;/p&gt; &lt;p&gt;Rob and I started off the session by presenting a decision framework of different upgrade strategies. We talked about how you can decide if migration is the best option for your situation.&amp;nbsp; Then Rob went over interop with COM and .NET by showing how you can call a COM component from .NET and how you can call a .NET component from VB6 using Runtime callable wrappers (RCW) and COM callable wrappers (CCW). &lt;/p&gt; &lt;p&gt;Next I presented the &lt;a href="http://msdn.microsoft.com/en-us/vbasic/bb419144.aspx" target="_blank"&gt;Interop Forms Toolkit&lt;/a&gt;. (I've &lt;a href="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/Article/default.aspx" target="_blank"&gt;written about this toolkit before in this blog&lt;/a&gt; as well as have done &lt;a href="http://msdn.microsoft.com/en-us/vbasic/bb466226.aspx?wt.slv=topsectionsee#interop" target="_blank"&gt;videos&lt;/a&gt; on these.) The toolkit allows you to take a phased migration approach to moving (or just extending) your VB6 application by making it really easy to build .NET user controls and forms and run then directly from your VB6 applications. When you install the toolkit it gives you new project templates for building user control or form libraries that have all the pluming set up to register them properly and let you use them in your VB6 apps. I showed how to create an Interop user control, expose a public property and use it from a VB6 app. Then I showed how debugging works and how you can get My settings working properly as well. &lt;/p&gt; &lt;p&gt;Rob finished up the show by taking the code I built and showing how to expose .NET events to VB6 as well as how you can manage global variables and state between VB6 an .NET using the features of the toolkit. I think people really liked the demos because we really showed how easy it is. &lt;/p&gt; &lt;p&gt;Now for the reason why I didn't have time to post yesterday. Jean-Rene, the conference organizer gave Alan and I tickets to The Cure who were playing at the Air Canada Centre. Although I was never a huge Cure fan (my sister more than me) I thought it would be semi-nostalgic to see them. But we didn't care about the opening act and I was pretty wiped so we went and had a great Italian dinner and then walked down to the arena. We walked in easily, bought a couple beers, and headed in right as they started. I have to admit they were pretty good after all these years and they played a lot of old songs that I recognized so it turned out to be a great time. &lt;/p&gt; &lt;p&gt;&lt;img src="http://blogs.msdn.com/photos/bethmassi/images/8513433/500x375.aspx"&gt; &lt;/p&gt; &lt;p&gt;Thanks Jean-Rene and Toronto for a great conference! Now time to pack, grab some lunch and head to the airport. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8513459" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Speaking/default.aspx">Speaking</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Community/default.aspx">Community</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx">Interop Toolkit</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/DevCenter/default.aspx">DevCenter</category></item><item><title>Webcast Starting! -- Migrating from VB6 to .NET </title><link>http://blogs.msdn.com/bethmassi/archive/2008/03/28/webcast-starting-migrating-from-vb6-to-net.aspx</link><pubDate>Fri, 28 Mar 2008 18:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8341912</guid><dc:creator>Beth Massi</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/8341912.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=8341912</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=8341912</wfw:comment><description>&lt;P&gt;Come join me and Rob Windsor in 30 minutes for a webcast on how to move your VB6 investments to .NET!&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032371436&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US" target=_blank mce_href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032371436&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;&lt;STRONG&gt;Live From &lt;STRIKE&gt;Red&lt;/STRIKE&gt;Bethmond: Migrating Your Visual Basic 6 Investments to .NET&lt;/STRONG&gt; &lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Hope to see you all there. If you can't make it live, the download will be available this evening.&lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8341912" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Community/default.aspx">Community</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx">Interop Toolkit</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Webcast/default.aspx">Webcast</category></item><item><title>Channel 9 Interview - Tips and Tricks with the Interop Forms Toolkit </title><link>http://blogs.msdn.com/bethmassi/archive/2008/03/04/channel-9-interview-tips-and-tricks-with-the-interop-forms-toolkit.aspx</link><pubDate>Wed, 05 Mar 2008 03:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8039148</guid><dc:creator>Beth Massi</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/8039148.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=8039148</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=8039148</wfw:comment><description>&lt;P&gt;&lt;A class="" href="http://channel9.msdn.com/ShowPost.aspx?PostID=388101" target=_blank mce_href="http://channel9.msdn.com/ShowPost.aspx?PostID=388101"&gt;I just posted a Channel 9 interview&lt;/A&gt; with&amp;nbsp;Todd Apley, Senior Test Lead on the VB Team, where he shows us a variety of tips and tricks with using the &lt;A href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit&lt;/A&gt; on Visual Studio 2008. He also shows us how to deploy a hybrid application built with VB 6 and VB.NET using XCopy deployment and RegFree-COM.&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&lt;A href="http://blogs.msdn.com/vbteam/archive/tags/Todd+Apley/default.aspx"&gt;Todd &lt;/A&gt;will also be posting follow-up information on the &lt;A href="http://blogs.msdn.com/vbteam/default.aspx"&gt;VB Team blog&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;Also, check out &lt;A class="" href="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/Article/default.aspx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/Article/default.aspx"&gt;articles on this blog on interop&lt;/A&gt;&amp;nbsp;as well as&amp;nbsp;the rest of the &lt;A class="" href="http://channel9.msdn.com/Showforum.aspx?forumid=38&amp;amp;tagid=274" target=_blank mce_href="http://channel9.msdn.com/Showforum.aspx?forumid=38&amp;amp;tagid=274"&gt;VB Team Interviews on Channel 9&lt;/A&gt;.&lt;BR&gt;&lt;BR&gt;Enjoy!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8039148" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Community/default.aspx">Community</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VB6/default.aspx">VB6</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx">Interop Toolkit</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Channel9/default.aspx">Channel9</category></item><item><title>Webcast on VB6 Migration to .NET</title><link>http://blogs.msdn.com/bethmassi/archive/2008/02/26/webcast-on-vb6-migration-to-net.aspx</link><pubDate>Wed, 27 Feb 2008 01:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7910806</guid><dc:creator>Beth Massi</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/7910806.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=7910806</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=7910806</wfw:comment><description>&lt;P&gt;I just added another webcast for &lt;A class="" href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032371436&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US" target=_blank mce_href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032371436&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;March 28th on VB6 migration to .NET&lt;/A&gt; to the list of &lt;A class="" href="http://blogs.msdn.com/bethmassi/archive/2008/02/12/live-from-bethmond-webcasts-the-vbeth-webcast-series.aspx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/archive/2008/02/12/live-from-bethmond-webcasts-the-vbeth-webcast-series.aspx"&gt;March madness webcasts I'll be&amp;nbsp;doing&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://www.msmvps.com/windsor" target=_blank mce_href="http://www.msmvps.com/windsor"&gt;Rob Windsor&lt;/A&gt; and I will be presenting a bonus webcast on VB6 to .NET migration. If you're involved in a migration push and don't know where to start this webcast is for you. We'll show some proven strategies as well as walk through the &lt;A class="" href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit&lt;/A&gt; which can dramatically&amp;nbsp;speed up development&amp;nbsp;in a phased migration approach.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A class="" href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032371436&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US" target=_blank mce_href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032371436&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;&lt;STRONG&gt;Live From &lt;STRIKE&gt;Red&lt;/STRIKE&gt;Bethmond: Migrating Your Visual Basic 6 Investments to .NET&lt;/STRONG&gt; &lt;/A&gt;&lt;BR&gt;&lt;STRONG&gt;3/28/2008 9:00 AM Pacific Time (US &amp;amp; Canada)- 3/28/2008 10:00 AM | Duration:60 Minutes&amp;nbsp;&lt;BR&gt;&lt;/STRONG&gt;Visual Basic (VB) 6 was used by millions of developers world-wide to build applications ranging from thousands to millions of lines of code representing significant organizational investments. The path from VB 6 to .NET has not always been clear, there is no one size fits all approach. We’ll cut to the chase, exploring the pros and cons of each option using real world examples. You will leave this webcast with the framework and tools to develop the right strategy for your organization to leverage your existing investments while taking advantage of the power and productivity the .NET Framework provides. Presented By Beth Massi, Visual Studio Community PM With special guest Rob Windsor, Visual Basic MVP.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;&lt;A class="" href="http://blogs.msdn.com/bethmassi/archive/2008/02/12/live-from-bethmond-webcasts-the-vbeth-webcast-series.aspx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/archive/2008/02/12/live-from-bethmond-webcasts-the-vbeth-webcast-series.aspx"&gt;Check out the other webcasts in March on Visual Basic 9 and LINQ.&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Enjoy!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7910806" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Speaking/default.aspx">Speaking</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Community/default.aspx">Community</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VB6/default.aspx">VB6</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx">Interop Toolkit</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/DevCenter/default.aspx">DevCenter</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Webcast/default.aspx">Webcast</category></item><item><title>Migration from VB6 to .NET on dnrTV</title><link>http://blogs.msdn.com/bethmassi/archive/2008/01/02/migration-from-vb6-to-net-on-dnrtv.aspx</link><pubDate>Thu, 03 Jan 2008 00:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6960107</guid><dc:creator>Beth Massi</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/6960107.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=6960107</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=6960107</wfw:comment><description>&lt;P&gt;There's still a lot of Visual Basic 6 systems running the world and&amp;nbsp;if you're one of the developers maintaining those systems&amp;nbsp;you may be looking at&amp;nbsp;migration strategies to move to .NET. You don't have to take on a complete rewrite of your system, there are many ways of interoperating with VB6 from .NET and vice versa. &lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://www.dnrtv.com/default.aspx?showNum=94" target=_blank mce_href="http://www.dnrtv.com/default.aspx?showNum=94"&gt;Check out Rob Windsor on dnrTV&lt;/A&gt; where he shows us how to interoperate with VB 6.0 applications&amp;nbsp;and&amp;nbsp;.NET in a variety of ways. He walks through different approaches to architecting these hybrid systems. He also shows how to use the &lt;A class="" href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit&lt;/A&gt; to demonstrate a phased migration strategy where you can convert VB 6 forms and controls to .NET pieces at a time. &lt;/P&gt;
&lt;P&gt;Also take a look at these &lt;A class="" href="http://msdn2.microsoft.com/en-us/vbasic/bb466226.aspx#interop" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/bb466226.aspx#interop"&gt;How Do I videos&lt;/A&gt; and&amp;nbsp;&lt;A class="" href="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/Article/default.aspx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/Article/default.aspx"&gt;articles&lt;/A&gt; on building and deploying interop forms and user controls. &lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6960107" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Community/default.aspx">Community</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VB6/default.aspx">VB6</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx">Interop Toolkit</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/DevCenter/default.aspx">DevCenter</category></item><item><title>First Day at DevTeach</title><link>http://blogs.msdn.com/bethmassi/archive/2007/11/28/first-day-at-devteach.aspx</link><pubDate>Wed, 28 Nov 2007 19:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6582353</guid><dc:creator>Beth Massi</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/6582353.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=6582353</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=6582353</wfw:comment><description>&lt;P&gt;I'm up in Vancouver at &lt;A class="" href="http://www.devteach.com/" target=_blank mce_href="http://www.devteach.com/"&gt;DevTeach&lt;/A&gt; and I have to say that so far it's been a great conference! I did a demo of my &lt;A class="" href="http://blogs.msdn.com/bethmassi/attachment/6179449.ashx" mce_href="http://blogs.msdn.com/bethmassi/attachment/6179449.ashx"&gt;Visual Studio Tip of the Day browser&lt;/A&gt; and built an add-in (&lt;A class="" href="http://blogs.msdn.com/bethmassi/archive/2007/11/21/visual-studio-tip-of-the-day-let-s-build-an-add-in.aspx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/archive/2007/11/21/visual-studio-tip-of-the-day-let-s-build-an-add-in.aspx"&gt;like I showed here&lt;/A&gt;) for part of the keynote with Ken Levy of the &lt;A class="" href="http://msdn2.microsoft.com/en-us/vstudio/aa700819.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vstudio/aa700819.aspx"&gt;VSX team&lt;/A&gt;. This morning I open up VS and low and behold, &lt;A class="" href="http://blogs.msdn.com/saraford/" target=_blank mce_href="http://blogs.msdn.com/saraford/"&gt;Sara's &lt;/A&gt;next tip mentions&amp;nbsp;my add-in and the conference! Weird, I'm reading about my add-in in my add-in :-). &lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/6582034/507x480.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/6582034/507x480.aspx"&gt;&lt;/P&gt;
&lt;P&gt;The TOTD browser is a great example of using LINQ to XML in Visual Basic so I encourage you to &lt;A class="" href="http://blogs.msdn.com/bethmassi/attachment/6179449.ashx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/attachment/6179449.ashx"&gt;download it&lt;/A&gt; and have a look at how easy this was to do with LINQ. Also, Sara will be meeting me up here this evening for a panel discussion with Richard Campbell and Carl Franklin on Open Source. Thanks Sara! I owe you some good Canadian beer after the panel ;-). &lt;/P&gt;
&lt;P&gt;Yesterday I also did a session on migration strategies for VB6 apps to .NET. I talked about a decision framework and then showed a ton of code that demonstrated interop between VB6 and VB.NET using the &lt;A class="" href="http://msdn2.microsoft.com/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn2.microsoft.com/vbasic/bb419144.aspx"&gt;Interop Forms&amp;nbsp;Toolkit 2.0&lt;/A&gt;. I also showed a couple ways to approach debugging as well as showed how to deal with application config settings. &lt;/P&gt;
&lt;P&gt;I was surprised by how many people came to the talk and how well received it was. There's a lot of great VB developers here in Canada. If you're scratching your head about how to approach a migration project, please check out the&lt;A class="" href="http://msdn2.microsoft.com/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn2.microsoft.com/vbasic/bb419144.aspx"&gt; Toolkit&lt;/A&gt; and these &lt;A class="" href="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx"&gt;posts for more information&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Later today I'm doing a session on What's New in Visual Basic 9 and it should be LOADS of fun. I have a few surprises planned :-). &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6582353" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VS2008/default.aspx">VS2008</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Community/default.aspx">Community</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx">Interop Toolkit</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/DevCenter/default.aspx">DevCenter</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VSX/default.aspx">VSX</category></item><item><title>Using My.Settings and WCF Configuration with the Interop Forms Toolkit</title><link>http://blogs.msdn.com/bethmassi/archive/2007/10/24/using-my-settings-and-wcf-configuration-with-the-interop-forms-toolkit.aspx</link><pubDate>Wed, 24 Oct 2007 23:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5656348</guid><dc:creator>Beth Massi</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/5656348.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=5656348</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=5656348</wfw:comment><description>&lt;P&gt;Recently I received a question from a customer asking how to get an Interop User control developed with the &lt;A class="" href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit&lt;/A&gt; to be able to read the application configuration settings (app.config) in order to call a WCF service. (If you're unfamiliar with how to develop Interop user controls you can &lt;A class="" href="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx"&gt;read these posts&lt;/A&gt;&amp;nbsp;and &lt;A class="" href="http://msdn2.microsoft.com/en-us/vbasic/bb466226.aspx#interop" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/bb466226.aspx#interop"&gt;watch these videos&lt;/A&gt;.) Since Interop user controls are compiled into library (.dll) assemblies the configuration file that is generated is named after the assembly, not the VB 6 application, which means that the Interop User Control isn't able to read the settings from this file. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/bethmassi/WindowsLiveWriter/Usi.SettingsandWCFConfigurationwiththeIn_B8C3/image_1.png" mce_href="http://blogs.msdn.com/blogfiles/bethmassi/WindowsLiveWriter/Usi.SettingsandWCFConfigurationwiththeIn_B8C3/image_1.png" atomicselection="true"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=240 alt=image src="http://blogs.msdn.com/blogfiles/bethmassi/WindowsLiveWriter/Usi.SettingsandWCFConfigurationwiththeIn_B8C3/image_thumb_1.png" width=222 border=0 mce_src="http://blogs.msdn.com/blogfiles/bethmassi/WindowsLiveWriter/Usi.SettingsandWCFConfigurationwiththeIn_B8C3/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;The trick to solve this is simple,&amp;nbsp;just rename the .dll.config file generated in your bin folder to the name of your VB 6 EXE and place that file in the same folder as your VB 6 EXE. Once you do that, the WCF service client configuration settings will be read properly at runtime. &lt;/P&gt;
&lt;P&gt;You can easily set this to happen automatically using Build Events. Just double-click on My Project in the Solution Explorer to open the project properties, select the Compile tab, click the "Build Events" button, then click "Edit Post-build...". In the window type the copy command you want to execute. I.e. &lt;/P&gt;
&lt;P&gt;copy /Y "$(TargetDir)$(ProjectName).dll.config" "$(ProjectDir)..\..\VB6App\Project1.exe.config"&lt;BR&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A href="http://blogs.msdn.com/blogfiles/bethmassi/WindowsLiveWriter/Usi.SettingsandWCFConfigurationwiththeIn_B8C3/image.png" mce_href="http://blogs.msdn.com/blogfiles/bethmassi/WindowsLiveWriter/Usi.SettingsandWCFConfigurationwiththeIn_B8C3/image.png" atomicselection="true"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=442 alt=image src="http://blogs.msdn.com/blogfiles/bethmassi/WindowsLiveWriter/Usi.SettingsandWCFConfigurationwiththeIn_B8C3/image_thumb.png" width=640 border=0 mce_src="http://blogs.msdn.com/blogfiles/bethmassi/WindowsLiveWriter/Usi.SettingsandWCFConfigurationwiththeIn_B8C3/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Now every time the app.config file is modified in your Interop user control project, the .config settings will get renamed and copied to the right place, your VB6 application folder. &lt;/P&gt;
&lt;P&gt;But what about using &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/ms379611(vs.80).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/ms379611(vs.80).aspx"&gt;My.Settings&lt;/A&gt;? My.Settings allow you to easily store application-scoped and user-scoped settings and access them easily in your .NET programs. They are also stored in the application config file. But just renaming the file in this case doesn't work alone. This is because My.Settings uses what's called a &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/system.configuration.settingsprovider(vs.80).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/system.configuration.settingsprovider(vs.80).aspx"&gt;Settings Provider&lt;/A&gt;. In Visual Studio 2005 the default settings provider loads and saves settings using the configuration system, thus they appear in the .config file, however they are read differently than the WCF settings. &lt;/P&gt;
&lt;P&gt;So in addition to renaming the config file, we need to also modify the section headers in the app.config file to also specify the name of our VB 6 application (the bolded sections were added):&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;xml&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;version&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;1.0&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;encoding&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;utf-8&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; ?&amp;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;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;configuration&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;configSections&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;sectionGroup&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;userSettings&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &amp;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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&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;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;section&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;AMyInteropUserControlLibrary1.My.MySettings&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;allowExeDefinition&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;MachineToLocalUser&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;requirePermission&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;!--&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Using userSettings in a VB6 application:&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Change the name here to the name of your VB6 .EXE &lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;--&amp;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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&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;&amp;lt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;section&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;name&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;Project1.My.MySettings&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;allowExeDefinition&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;MachineToLocalUser&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;requirePermission&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt;&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;sectionGroup&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;sectionGroup&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;applicationSettings&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &amp;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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&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;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;section&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;AMyInteropUserControlLibrary1.My.MySettings&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;requirePermission&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;!--&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Using applicationSettings in a VB6 application:&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Change the name here to the name of your VB6 .EXE &lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;--&amp;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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;section&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;name&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;Project1.My.MySettings&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;requirePermission&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt;&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;sectionGroup&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;configSections&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;These section groups will not be lost if you add new settings via the Settings tab on your project properties. Now you can freely change the setting in the .exe.config file after deployment and your Interop user control will be able to read the settings properly.&amp;nbsp; I've &lt;A class="" href="http://blogs.msdn.com/bethmassi/attachment/5656348.ashx" mce_href="http://blogs.msdn.com/bethmassi/attachment/5656348.ashx"&gt;attached a complete example&lt;/A&gt;, including the&amp;nbsp;WCF service,&amp;nbsp;for you to play with in Visual Studio 2005. Please read the Readme.txt included for proper set-up.&lt;/P&gt;
&lt;P&gt;Enjoy,&lt;BR&gt;-B&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5656348" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/bethmassi/attachment/5656348.ashx" length="902391" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx">Interop Toolkit</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/DevCenter/default.aspx">DevCenter</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Article/default.aspx">Article</category></item><item><title>Visual Basic on Channel9</title><link>http://blogs.msdn.com/bethmassi/archive/2007/07/21/visual-basic-on-channel9.aspx</link><pubDate>Sat, 21 Jul 2007 20:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3991634</guid><dc:creator>Beth Massi</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/3991634.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=3991634</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=3991634</wfw:comment><description>&lt;P&gt;I just posted a couple screen casts/interviews on Channel9 you should definitely check out. I rounded up VB team members and influentials and asked them what their favorite Visual Studio 2008 features were and to give us all a demo of them! &lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://channel9.msdn.com/Showpost.aspx?postid=327367" target=_blank mce_href="http://channel9.msdn.com/Showpost.aspx?postid=327367"&gt;The first one is with Erik Meijer and he shows us his favorite feature, XML Literals:&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;In this in interview Erik Meijer, an Architect on the Data Programmability team, shows us how LINQ to XML works in the next version of Visual Basic, 9.0. He talks about some of the history behind the features as well as how XML literals, unique to Visual Basic, are implemented. He takes us on an adventure on how to efficiently work with XML using XML Intellisense and an Office Open XML Excel document, pointing out a lot of tid-bits of information along the way that only Erik could show us. &lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://channel9.msdn.com/ShowPost.aspx?PostID=327369" target=_blank mce_href="http://channel9.msdn.com/ShowPost.aspx?PostID=327369"&gt;&amp;nbsp;The next one is with Jonathan Aneja and he shows us the Interop Forms Toolkit 2.0:&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;﻿In this in interview Jonathan Aneja, a Program Manager on the Visual Basic team, shows us how the Interop Forms Toolkit 2.0 helps you migrate your existing VB 6 applications one form at a time to .NET. He gives us insight on how we can write .NET user controls and forms to take advantage of the .NET framework but still run within our VB 6 applications. He shows us a demo where he creates a .NET user control which uses LINQ to SQL features and then shows it running inside a VB 6 form. &lt;/P&gt;
&lt;P&gt;I suggest watching them full screen for easier viewing of the demos. More will be coming so stay tuned. And many thanks to &lt;A class="" href="http://blogs.msdn.com/kathleen/" target=_blank mce_href="http://blogs.msdn.com/kathleen/"&gt;Kathleen McGrath&lt;/A&gt; for helping with the production.&lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3991634" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bethmassi/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VS2008/default.aspx">VS2008</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Community/default.aspx">Community</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VB6/default.aspx">VB6</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx">Interop Toolkit</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Channel9/default.aspx">Channel9</category></item><item><title>Debugging Hybrid VB6/.NET Applications</title><link>http://blogs.msdn.com/bethmassi/archive/2007/07/03/debugging-hybrid-vb6-net-applications.aspx</link><pubDate>Wed, 04 Jul 2007 03:11:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3678898</guid><dc:creator>Beth Massi</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/3678898.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=3678898</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=3678898</wfw:comment><description>&lt;P&gt;To wrap up &lt;A class="" href="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx"&gt;this series of posts on hybrid applications with the Interop Forms Toolkit&lt;/A&gt;, I'd like to talk about debugging. There's a couple ways we can go about debugging with VB6 and Visual Studio and depending on where you're spending most of your coding&amp;nbsp;time, you may opt for one method or the other. &lt;/P&gt;
&lt;P&gt;The first way we can debug is by attaching to the running VB6.EXE process from Visual Studio. This works well if you are working primarily in VB6 code. You'll need to already have the VB6 IDE open and the &lt;STRONG&gt;project running&lt;/STRONG&gt; in order to attach properly. Start your VB6 project from the VB6 IDE then go back to Visual Studio and select Tools --&amp;gt; Attach to Process and select VB6.EXE. It's important that the VB6 application is running and not in design mode when you attach.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/3678468/318x375.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/3678468/318x375.aspx"&gt;&lt;/P&gt;
&lt;P&gt;Now you'll be able to set breakpoints in both Visual Studio and VB6 and have them step through each other by hitting F8. (NOTE: The Visual Basic Development Settings profile gives you the VB6 keyboard mappings, including F8 for stepping through code. If you just want F8 and not the other VB mappings, go to Tools --&amp;gt; Options --&amp;gt; Environment --&amp;gt; Keyboard and select the Debug.StepInto command.)&lt;/P&gt;
&lt;P&gt;The other way to debug across both environments is to use the Debug Start Action. This method works well if you are primarily working in Visual Studio like when you are first creating your .NET controls/forms. This is because when you need to recompile your .NET assembly you'll sometimes need to close VB6 in order to see the new changes. This is because VB6 hangs onto the DLL while you're developing. It&amp;nbsp;may be&amp;nbsp;easier for you to set up debugging this way because VB6 is automatically started when you start the Debug from Visual Studio. But watch out, the VB6 IDE is also closed as well when you stop debugging in Visual Studio and so any changes that you make to your VB6 application (like via Edit and Continue) you'll need to remember to explicitly save by stopping the application in VB6 and saving the project. &lt;/P&gt;
&lt;P&gt;To set this up, go to My Project --&amp;gt; Debug tab then select "Start External Program" and find your VB6.EXE (i.e. C:\Program Files\Microsoft Visual Studio6\VB98\VB6.EXE). Next you'll need to specify your VB6 project file and wrap the argument in quotes (i.e. "C:\VB6App\MyVB6App.vbp"). Finally you'll want to set the working directory appropriately. For instance, if you connect to a database file or other resources in the current directory&amp;nbsp;then make sure you set that appropriately too. &lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/3679250/500x213.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/3679250/500x213.aspx"&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Now when you start the Debug in Visual Studio, the VB6 IDE will open your project and you can then start the Debug there and set the necessary breakpoints. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3678898" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VB6/default.aspx">VB6</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx">Interop Toolkit</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Article/default.aspx">Article</category></item><item><title>Deploying Interop UserControls with RegFree-COM</title><link>http://blogs.msdn.com/bethmassi/archive/2007/06/27/deploying-interop-usercontrols.aspx</link><pubDate>Thu, 28 Jun 2007 06:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3574462</guid><dc:creator>Beth Massi</dc:creator><slash:comments>19</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/3574462.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=3574462</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=3574462</wfw:comment><description>&lt;P&gt;One of the features of the latest &lt;A class="" href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit&lt;/A&gt; is the ability to develop UserControls in addition to Windows Forms. In a &lt;A class="" href="http://blogs.msdn.com/bethmassi/archive/2007/06/13/interop-forms-toolkit-your-new-best-friend.aspx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/archive/2007/06/13/interop-forms-toolkit-your-new-best-friend.aspx"&gt;previous post&lt;/A&gt;, I showed how to create a simple Interop UserControl. I also have a &lt;A class="" href="http://download.microsoft.com/download/d/6/4/d6400d90-d09e-4f23-bbb4-1b98da22da4f/2InteropUserControl.wmv" mce_href="http://download.microsoft.com/download/d/6/4/d6400d90-d09e-4f23-bbb4-1b98da22da4f/2InteropUserControl.wmv"&gt;video here on creating them&lt;/A&gt;, and &lt;A class="" href="http://download.microsoft.com/download/d/6/4/d6400d90-d09e-4f23-bbb4-1b98da22da4f/3HybridDeployment.wmv" mce_href="http://download.microsoft.com/download/d/6/4/d6400d90-d09e-4f23-bbb4-1b98da22da4f/3HybridDeployment.wmv"&gt;one here on deploying a hybrid application&lt;/A&gt; using the standard Setup and Deployment project in Visual Studio 2005. &lt;/P&gt;
&lt;P&gt;The benefit of creating Interop UserControl libraries is that you can deploy them using what's called &lt;A class="" href="http://msdn.microsoft.com/msdnmag/issues/05/04/RegFreeCOM/" target=_blank mce_href="http://msdn.microsoft.com/msdnmag/issues/05/04/RegFreeCOM/"&gt;RegFree-COM&lt;/A&gt;. This means that if you're deploying your VB6 applications on XP or higher OSs then you don't have to manually register the assemblies as COM components. Instead the operating system will "register" them for you on-the-fly at runtime. The COM component registry keys aren't physically created in the system's registry, keeping the system clean and allowing you to deploy COM components in a side-by-side fashion.&amp;nbsp;(On your development machine the UserControls are still physically registered when you build the assemblies so that you can develop in Visual Basic 6.) This may be the way to go if you have a current setup program that you use for your VB6 application that was written with the Setup and Deployment Wizard. &lt;/P&gt;
&lt;P&gt;Using RegFree-COM also means that you can take advantage of &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/t71a733d(VS.80).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/t71a733d(VS.80).aspx"&gt;ClickOnce Deployment&lt;/A&gt; (since ClickOnce will not&amp;nbsp;register COM components). The benefit of using ClickOnce deployment with your VB6 applications is that you can take advantage of a modern deployment architecture which includes automatic updates and deploying from a central web server. &lt;/P&gt;
&lt;P&gt;What the toolkit does to enable RegFree-COM is that it gets you started with a private assembly manifest for the UserControls. When you select the Interop User Control Library template when creating a new project in Visual Studio,&amp;nbsp;a InteropUserControl.manifest file is created for you along with the rest of the files. Inside this private assembly manifest is XML describing the controls inside your library. By default, the name of the UserControl that is created when you first create your library is InteropUserControl with a generated class id. This information is&amp;nbsp;described in the &amp;lt;clrClass&amp;gt; node.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/3574232/original.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/3574232/original.aspx"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&amp;gt;&lt;BR&gt;&amp;lt;!-- You don't need to worry about anything in this file unless you're&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using registration-free COM.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; There should be an appropriate &amp;lt;clrclass&amp;gt; section for every InteropUserControl&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; defined in the project --&amp;gt;&lt;BR&gt;&amp;lt;assembly xmlns="urn:schemas-microsoft-com:asm.v1" &lt;BR&gt;&amp;nbsp; manifestVersion="1.0"&amp;gt;&lt;BR&gt;&amp;lt;assemblyIdentity&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="win32"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name="InteropUserControlLibrary1"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; version="1.0.0.0" /&amp;gt;&lt;BR&gt;&lt;STRONG&gt;&amp;lt;clrClass&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clsid="{7395b9d9-da47-4262-80e7-b4eed8768d09}"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; progid="InteropUserControlLibrary1.InteropUserControl"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; threadingModel="Both"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name="InteropUserControlLibrary1.InteropUserControl" &amp;gt;&lt;BR&gt;&amp;lt;/clrClass&amp;gt;&lt;/STRONG&gt;&lt;BR&gt;&amp;lt;/assembly&amp;gt; &lt;/P&gt;
&lt;P&gt;When you change the name of InteropUserControl or the assembly&amp;nbsp;name you need to also update the contents of this file as well. If you add more UserControls to your library you'll need to create a new &amp;lt;clrClass&amp;gt; node with that control's information. You can find the class ID by looking in the Interop UserControl's VB6 Interop Code Region and then in the COM Registration Region: 
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;lt;ComClass(InteropUserControl.ClassId, InteropUserControl.InterfaceId, InteropUserControl.EventsId)&amp;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 class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;Class&lt;/SPAN&gt; InteropUserControl&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#&lt;SPAN style="COLOR: blue"&gt;Region&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a31515"&gt;"VB6 Interop Code"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#&lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt; COM_INTEROP_ENABLED &lt;SPAN style="COLOR: blue"&gt;Then&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#&lt;SPAN style="COLOR: blue"&gt;Region&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a31515"&gt;"COM Registration"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;' These&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;GUIDs provide the COM identity for this class &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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;' and its COM interfaces. If you change them, existing &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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;' clients will no longer be able to access the class.&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&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;Const&lt;/SPAN&gt; ClassId &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;String&lt;/SPAN&gt; = &lt;SPAN style="COLOR: #a31515"&gt;"&lt;SPAN style="BACKGROUND: yellow; mso-highlight: yellow"&gt;7395b9d9-da47-4262-80e7-b4eed8768d09&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&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;Const&lt;/SPAN&gt; InterfaceId &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;String&lt;/SPAN&gt; = &lt;SPAN style="COLOR: #a31515"&gt;"739b2e94-6bdf-4417-beff-25a457e6df8f"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&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;Const&lt;/SPAN&gt; EventsId &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;String&lt;/SPAN&gt; = &lt;SPAN style="COLOR: #a31515"&gt;"65029223-ea4e-4cb0-9462-27edbbf985fa"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;'These routines perform the additional COM registration needed by ActiveX controls&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;EditorBrowsable(EditorBrowsableState.Never)&amp;gt; _&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;ComRegisterFunction()&amp;gt; _&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Private&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Shared&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt; Register(&lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; t &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; Type)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ComRegistration.RegisterControl(t)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;EditorBrowsable(EditorBrowsableState.Never)&amp;gt; _&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;ComUnregisterFunction()&amp;gt; _&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Private&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Shared&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt; Unregister(&lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; t &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; Type)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ComRegistration.UnregisterControl(t)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Region&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;As an example, I created an Interop UserControl library&amp;nbsp;called ARegFreeComLibrary. In this library I created two UserControls, one called CustomerDetails and one called OrderDetails so my manifest looks like this: &lt;/P&gt;
&lt;P&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&amp;gt;&lt;BR&gt;&amp;lt;!-- You don't need to worry about anything in this file unless you're&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using registration-free COM.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; There should be an appropriate &amp;lt;clrclass&amp;gt; section for every InteropUserControl&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; defined in the project --&amp;gt;&lt;BR&gt;&amp;lt;assembly xmlns="urn:schemas-microsoft-com:asm.v1" &lt;BR&gt;&amp;nbsp; manifestVersion="1.0"&amp;gt;&lt;BR&gt;&amp;lt;assemblyIdentity&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="win32"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name="ARegFreeComLibrary"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; version="1.0.0.0" /&amp;gt;&lt;BR&gt;&amp;lt;clrClass&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clsid="{7395b9d9-da47-4262-80e7-b4eed8768d09}"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; progid="ARegFreeComLibrary.CustomerDetails"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; threadingModel="Both"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name="ARegFreeComLibrary.CustomerDetails" &amp;gt;&lt;BR&gt;&amp;lt;/clrClass&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;clrClass&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clsid="{bb58ec27-8668-49e0-90cf-3542075654a9}"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; progid="ARegFreeComLibrary.OrderDetails"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; threadingModel="Both"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name="ARegFreeComLibrary.OrderDetails" &amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/clrClass&amp;gt;&lt;BR&gt;&amp;lt;/assembly&amp;gt;&lt;/P&gt;
&lt;P&gt;The other manifest file you need to have for RegFree-COM to work is called a client manifest file and this needs to be manually created and then placed in the application's directory. This would be where your VB6 application is also deployed. The contents of this manifest include the name and version of the VB6 application and then the Interop UserControl assembly information:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&amp;gt;&lt;BR&gt;&amp;lt;assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;assemblyIdentity type="win32" name="MyVB6App" version="1.0.0.0" processorArchitecture="x86" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dependency&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dependentAssembly&amp;gt;&lt;BR&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;lt;assemblyIdentity type="win32" name="ARegFreeComLibrary" version="1.0.0.0" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/dependentAssembly&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/dependency&amp;gt;&lt;BR&gt;&amp;lt;/assembly&amp;gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Place this into a file named after your VB6 application with an extension of .manifest, in my case, MyVB6App.exe.manifest, and pop it into the same folder as the exe. &lt;STRONG&gt;It's important that you name the client&amp;nbsp;manifest file&amp;nbsp;the same&amp;nbsp;as your VB6 application + exe.manifest extension otherwise RegFree-COM will not work.&lt;/STRONG&gt; To manage the file easier, from the Project menu in Visual Studio I selected Add New Item and selected Text File to create the manifest. In the properties window&amp;nbsp;I then set the "Build Action" to Content and "Copy to Output Directory" to Copy Always. I find it easier to keep track of it this way.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/3593173/199x375.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/3593173/199x375.aspx"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Next thing to do is copy your VB6 app into the release folder under \bin\Release\ and any supporting files. In my example I am using an Access mdb, but I've added this file to the library I created as a local data file so it'll get built into the Release folder as well. Note, when working with local data files you'll need to also set the Copy to Output Directory &lt;A class="" href="http://blogs.msdn.com/bethmassi/archive/2007/05/29/working-with-a-local-data-file-in-vs.aspx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/archive/2007/05/29/working-with-a-local-data-file-in-vs.aspx"&gt;appropriately like I explain in this post&lt;/A&gt;. Now what the client is going to need in order to run all this is:&lt;/P&gt;
&lt;P mce_keep="true"&gt;1) The .NET Framework 2.0&lt;BR&gt;2) The VB runtime (comes with XP and up&amp;nbsp;OS's) and any OCX's or other referenced components/data you use in your VB6 application&lt;BR&gt;4) Your Interop UserControl assembly and&amp;nbsp;any .config files and the client .exe.manifest &lt;BR&gt;3) The Microsoft.InteropFormTools assembly &lt;/P&gt;
&lt;P mce_keep="true"&gt;When creating Interop UserControls you can remove the reference to the Microsoft.InteropFormTools assembly if you aren't using it -- just remove the reference and then comment out the code&amp;nbsp;at the top of the ActiveXControlHelpers.vb file. However, if you are using it&amp;nbsp;then it's easy to get ClickOnce to install this as a prerequisite (just like the Framework 2.0) because the toolkit now comes with a redistributable package. (You'll see this in a minute.)&lt;/P&gt;
&lt;P mce_keep="true"&gt;You can also add your VB6 application to the project which, in my example,&amp;nbsp;includes the MyVB6App.exe and the Msdatgrd.ocx (the VB6 DataGrid I'm using). Adding them&amp;nbsp;as content files and marking them to always copy to output directory will put them into the \bin\Release folder every time you build the UserControl project. You can also specify the&amp;nbsp;class library&amp;nbsp;project location when&amp;nbsp;you make&amp;nbsp;your VB6&amp;nbsp;EXE,&amp;nbsp;that way all the files&amp;nbsp;you need to deploy come out in one place, the \bin\Release. If you're deploying this to a machine that already has the VB6 Runtime and the .NET 2.0 Framework then you can just xcopy deploy the&amp;nbsp;Release&amp;nbsp;to the client&amp;nbsp;machine and run. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Using ClickOnce Deployment is optional but for this example we'll set it up this way. Since you can't use ClickOnce to deploy a&amp;nbsp;class library&amp;nbsp;project, instead of adding the VB6 application files to the&amp;nbsp;class library&amp;nbsp;project, we'll add them to a new Windows Forms application instead.&amp;nbsp;So I just added a simple Windows Application to my solution called InteropAppLauncher. Once you have this project created you can then add a reference to your Interop UserControl Assembly and select "Add Existing Item" on the VB6 application files as well as the client manifest file (MyVB6App.exe.manifest). In my case, since I'm using an Access.mdb file I moved this file into the launcher application as well so it can be deployed.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/3593153/216x480.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/3593153/216x480.aspx"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Next thing to do is to write a couple lines of code in the launcher's form so that it will launch your VB6 application right away and close.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;Class&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Private&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt; Form1_Load(&lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; sender &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; System.Object, &lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; e &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; System.EventArgs) &lt;SPAN style="COLOR: blue"&gt;Handles&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;MyBase&lt;/SPAN&gt;.Load&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Process.Start(&lt;SPAN style="COLOR: #a31515"&gt;"MyVB6App.exe"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;.Close()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;End&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;Class&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Now we're ready to publish with ClickOnce. Select My Project and go to the Publish Tab and enter the deployment location. I just set up a local file share, but you can easily publish to a web server as well. Select the Prerequisites button and you'll see the redistributable packages available. You'll definitely need .NET Framework 2.0 but you can decide whether you need the Interop Forms Toolkit 2.0 package depending on if you left the reference to Microsoft.InteropFormTools assembly. If you did, then you'll need to include this package.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/3591374/483x375.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/3591374/483x375.aspx"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Once you've set all that up you can click the Publish Now button or select Publish from the build menu. Now you have a ClickOnce setup that will launch your VB6 application which uses RegFree-COM in order to create a friction free deployment for your Interop User Controls. &lt;A class="" href="http://blogs.msdn.com/bethmassi/attachment/3574462.ashx" mce_href="http://blogs.msdn.com/bethmassi/attachment/3574462.ashx"&gt;I've included the&amp;nbsp;sample&amp;nbsp;I built for your reference&lt;/A&gt;. To try out RegFree-COM, just compile&amp;nbsp;the solution&amp;nbsp;and then run the InteropAppLauncher.exe in the \ARegFreeComLibrary\InteropAppLauncher\bin\Release\ folder. For more info on setting up ClickOnce to deploy Visual Basic 6 applications, &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/aa697430(VS.80).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/aa697430(VS.80).aspx"&gt;check out Scott's article on MSDN&lt;/A&gt;&amp;nbsp;and this &lt;A class="" href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032333404&amp;amp;EventCategory=3&amp;amp;culture=en-US&amp;amp;CountryCode=US" target=_blank mce_href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032333404&amp;amp;EventCategory=3&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;LabCast to try it out yourself right now&lt;/A&gt;. By the way, you can &lt;A class="" href="http://www.vfpconversion.com/Article.aspx?quickid=0703072" target=_blank mce_href="http://www.vfpconversion.com/Article.aspx?quickid=0703072"&gt;use ClickOnce for deploying Visual FoxPro applications&lt;/A&gt; as well.&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Anyone developing Visual Basic 6 (or Visual FoxPro) applications should consider taking advantage of the &lt;A class="" href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit 2.0&lt;/A&gt;, &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/t71a733d(VS.80).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/t71a733d(VS.80).aspx"&gt;ClickOnce Deployment&lt;/A&gt;, and &lt;A class="" href="http://msdn.microsoft.com/msdnmag/issues/05/04/RegFreeCOM/" target=_blank mce_href="http://msdn.microsoft.com/msdnmag/issues/05/04/RegFreeCOM/"&gt;RegFree-COM&lt;/A&gt; to bring .NET's modern&amp;nbsp;capabilities to your users in an easy-to-manage way. &lt;/P&gt;
&lt;P mce_keep="true"&gt;In the next interop post I'll talk about setting up debugging across Visual Studio and VB6. (UPDATE: &lt;A class="" href="http://blogs.msdn.com/bethmassi/archive/2007/07/03/debugging-hybrid-vb6-net-applications.aspx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/archive/2007/07/03/debugging-hybrid-vb6-net-applications.aspx"&gt;Here's how to debug&lt;/A&gt;.)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3574462" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/bethmassi/attachment/3574462.ashx" length="803076" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/ClickOnce/default.aspx">ClickOnce</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VB6/default.aspx">VB6</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx">Interop Toolkit</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Article/default.aspx">Article</category></item><item><title>Visual Basic Interop Video Series is Live!</title><link>http://blogs.msdn.com/bethmassi/archive/2007/06/25/visual-basic-interop-video-series-is-live.aspx</link><pubDate>Tue, 26 Jun 2007 05:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3535632</guid><dc:creator>Beth Massi</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/3535632.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=3535632</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=3535632</wfw:comment><description>&lt;P&gt;This how-to video series is focused on the &lt;A class="" href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit&lt;/A&gt; and working with Visual Basic .NET and Visual Basic 6 together. The &lt;A class="" href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit&lt;/A&gt; allows Visual Basic developers to migrate their Visual Basic 6 applications over to .NET using a phased migration strategy. Instead of having to convert the entire VB6 application at once, the toolkit enables.NET Forms and User Controls to run directly in Visual Basic 6 applications so that you can build the pieces that you need over time.&lt;/P&gt;
&lt;P&gt;Download the &lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9b4e6ed7-a2ba-44b4-95e5-eaa2761db692&amp;amp;DisplayLang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9b4e6ed7-a2ba-44b4-95e5-eaa2761db692&amp;amp;DisplayLang=en"&gt;Visual Basic Interop Video Series #1&lt;/A&gt; and the &lt;A class="" href="http://blogs.msdn.com/bethmassi/attachment/3535632.ashx" mce_href="http://blogs.msdn.com/bethmassi/attachment/3535632.ashx"&gt;associated code&lt;/A&gt; now!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3535632" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/bethmassi/attachment/3535632.ashx" length="1792504" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Videos/default.aspx">Videos</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx">Interop Toolkit</category></item><item><title>Interop Forms Toolkit - Your New Best Friend</title><link>http://blogs.msdn.com/bethmassi/archive/2007/06/13/interop-forms-toolkit-your-new-best-friend.aspx</link><pubDate>Thu, 14 Jun 2007 05:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3281506</guid><dc:creator>Beth Massi</dc:creator><slash:comments>20</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/3281506.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=3281506</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=3281506</wfw:comment><description>&lt;P&gt;I've been heads down this week (re)learning an older technology -- Visual Basic 6! With all the things to&amp;nbsp;focus on&amp;nbsp;like &lt;A class="" href="http://msdn2.microsoft.com/en-us/vbasic/aa700831.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/aa700831.aspx"&gt;this&lt;/A&gt;, &lt;A class="" href="http://silverlight.net/Default.aspx" target=_blank mce_href="http://silverlight.net/Default.aspx"&gt;this&lt;/A&gt; and &lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=471BB3AC-B31A-49CD-A567-F2E286715C8F&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=471BB3AC-B31A-49CD-A567-F2E286715C8F&amp;amp;displaylang=en"&gt;this&lt;/A&gt; you're probably asking "Um, Beth, WHY!?". It's because I've really been learning the &lt;A class="" href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit 2.0&lt;/A&gt; in order to bring you some killer videos on the subject. The &lt;A class="" href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit&lt;/A&gt; makes interoperating with .NET forms and user controls from VB6 (and Fox) apps a total snap! I'm really impressed with how easy it is. The toolkit provides a library and code templates that does all the heavy lifting for you so you can concentrate purely on the task at hand. (NOTE: The &lt;A class="" href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit 2.0&lt;/A&gt; is a Visual Studio Add-In and does not run under the &lt;A class="" href="http://msdn.microsoft.com/vstudio/express/vb/" target=_blank mce_href="http://msdn.microsoft.com/vstudio/express/vb/"&gt;Express editions of Visual Studio&lt;/A&gt;.)&lt;/P&gt;
&lt;P&gt;Why would you want to use it? Well lets say you have a 10 year old Visual Basic (or Visual FoxPro) line-of-business application that needs new features that only .NET can provide, or it's just brain-dead simple in .NET and you're crying because of the effort involved with VB6. Well that's where the toolkit comes in. Instead of converting your entire codebase over to .NET (yea, that'll happen), you can take a phased migration strategy to your application -- even if the application is a monolithic one. This is because the toolkit allows you to seamlessly interoperate between VB6 (COM) and .NET code. .NET controls look like&amp;nbsp;ActiveX controls to VB6. &lt;/P&gt;
&lt;P&gt;Let's look at an example. Once you install the toolkit you're ready to start creating .NET control assemblies that can interoperate with VB6. (You can also create complete .NET forms, but the advantage of creating user controls (new to version 2.0 of the toolkit) instead is that they can use &lt;A class="" href="http://msdn.microsoft.com/msdnmag/issues/05/04/RegFreeCOM/" target=_blank mce_href="http://msdn.microsoft.com/msdnmag/issues/05/04/RegFreeCOM/"&gt;RegFree-COM&lt;/A&gt; which allows you to deploy your assemblies along with your VB6 exe's via &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/t71a733d(VS.80).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/t71a733d(VS.80).aspx"&gt;ClickOnce Technology&lt;/A&gt;. ) When you create a new project, select the template located under "My Templates" called VB6 Interop User Control which will create a control library that you can interoperate with VB6 applications. This template sets up the proper interop code&amp;nbsp;you need as well as the manifests that enable RegFree-COM. &lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 292px; HEIGHT: 196px" height=196 src="http://blogs.msdn.com/photos/bethmassi/images/3281569/original.aspx" width=292 mce_src="http://blogs.msdn.com/photos/bethmassi/images/3281569/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;If we double-click on the InteropUserControl you'll notice some ComClass attributes as well as a region&amp;nbsp;called "VB6 Interop Code". &lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/3281856/640x118.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/3281856/640x118.aspx"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So I&amp;nbsp;have a VB6 application that we want to extend. For this example it's just a simple form with a grid that pulls up customers from an Access database. A new requirement is to be able to edit the customer details below this grid so we'll extend the VB6 application with a .NET user control. We can easily create this user control in .NET and connect to the same Access database using the drag-and-drop databinding of Visual Studio 2005 &lt;A class="" href="http://msdn2.microsoft.com/en-us/vbasic/bb466226.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/bb466226.aspx"&gt;as shown in my videos&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/3281741/500x300.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/3281741/500x300.aspx"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Of course this is a very simple example. You are not limited to data-access controls. You have the entire .NET Framework here at your disposal including the BackgroundWorker for multi-threading and .NET Web Services -- things that in VB6 are difficult or impossible to do.&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;When we design our .NET user control, any public property or method we create on the control will be exposed to VB6. I'll add a public property called CustomerID and in the setter I'll load the customer record from our database. I just create a simple parameterized query (&lt;A class="" href="http://blogs.msdn.com/bethmassi/archive/2007/05/25/creating-a-parameterized-query.aspx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/archive/2007/05/25/creating-a-parameterized-query.aspx"&gt;like I did here&lt;/A&gt;) on the CustomerTableAdapter that passes the CustomerID. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;'Please enter any new code here, below the Interop code&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;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Private&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; m_custID &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;String&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;Property&lt;/SPAN&gt; CustomerID() &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;String&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Get&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Return&lt;/SPAN&gt; m_custID&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Get&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; value &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;String&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt; m_custID &amp;lt;&amp;gt; value &lt;SPAN style="COLOR: blue"&gt;Then&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&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;m_custID = value&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&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;LoadCustomer()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;If&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Set&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;End&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;Property&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Private&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt; LoadCustomer()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;.CustomerID &amp;lt;&amp;gt; &lt;SPAN style="COLOR: #a31515"&gt;""&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Then&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;Me&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;.CustomersTableAdapter.FillByCustomerID( _&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&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; &lt;/SPAN&gt;Me&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;.CustomerDataSet.Customers, &lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;.CustomerID)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;If&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 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;End&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;
&lt;P mce_keep="true"&gt;Now build the solution. In development, this will register your interop user controls into the registry so that you can use them as ActiveX controls in Visual Basic 6. So back in the VB6 IDE, just add a reference to your new components by selecting "Project -- Components" (or Ctrl +T) and selecting your library. This will add the components to the VB6 toolbox. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/3281940/416x375.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/3281940/416x375.aspx"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Then you can drag-and-drop the user control from the toolbox onto the VB6 form. Jump to the code-behind in VB6 and add the code to set the CustomerID on the user control. You get intellisense on the public properties and methods.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/3282025/original.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/3282025/original.aspx"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Running the VB6 app we can now access our .NET control just like any other control on the form. The interop forms toolkit helper methods even take care of managing tabbing and focusing of the controls for you. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/3282102/516x480.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/3282102/516x480.aspx"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Consider performing a phased migration to your current LOB applications instead of&amp;nbsp;a costly rewrite using&amp;nbsp;the &lt;A class="" href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit 2.0&lt;/A&gt;. As you can see it allows you to quickly get .NET functionality into your current applications. Your users will need the .NET framework installed on their machines and the .NET user control assemblies registered, however with &lt;A class="" href="http://msdn.microsoft.com/msdnmag/issues/05/04/RegFreeCOM/" target=_blank mce_href="http://msdn.microsoft.com/msdnmag/issues/05/04/RegFreeCOM/"&gt;RegFree-COM&lt;/A&gt;&amp;nbsp;and &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/t71a733d(VS.80).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/t71a733d(VS.80).aspx"&gt;ClickOnce Deployment&lt;/A&gt;, these issues can be easily solved. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3281506" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VB6/default.aspx">VB6</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx">Interop Toolkit</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Article/default.aspx">Article</category></item></channel></rss>