<?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>Goto 100  - Development with Visual Basic : Interop</title><link>http://blogs.msdn.com/goto100/archive/tags/Interop/default.aspx</link><description>Tags: Interop</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>In VB6 we had the API Viewer, In VB .NET you get the P/Invoke Interop Assistant</title><link>http://blogs.msdn.com/goto100/archive/2009/06/05/in-vb6-we-had-the-api-viewer-in-vb-net-you-get-the-p-invoke-interop-assistant.aspx</link><pubDate>Fri, 05 Jun 2009 19:27:41 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9701569</guid><dc:creator>Eric Nelson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/goto100/comments/9701569.aspx</comments><wfw:commentRss>http://blogs.msdn.com/goto100/commentrss.aspx?PostID=9701569</wfw:commentRss><description>&lt;h4&gt;VB6 programmers will remember a useful little utility called the API Viewer, the helped out when you needed to make a Windows API call.&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/goto100/WindowsLiveWriter/InVB.NETyougetthePInvokeInteropAssistant_F57A/clip_image002_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/goto100/WindowsLiveWriter/InVB.NETyougetthePInvokeInteropAssistant_F57A/clip_image002_thumb.jpg" width="467" height="433" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;There is now an equivalent tool for .NET, the P/Invoke Interop Assistant (&lt;a href="http://www.codeplex.com/clrinterop"&gt;http://www.codeplex.com/clrinterop&lt;/a&gt; ). Not surprisingly it does a little bit more, so as well as enabling you to look up the signature for a particular call, it will also translate snippets of C code.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/goto100/WindowsLiveWriter/InVB.NETyougetthePInvokeInteropAssistant_F57A/clip_image004_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://blogs.msdn.com/blogfiles/goto100/WindowsLiveWriter/InVB.NETyougetthePInvokeInteropAssistant_F57A/clip_image004_thumb.jpg" width="562" height="499" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Notice that it generates required structure definitions to go with your function call!&lt;/p&gt;  &lt;p&gt;I also noticed that the P/Invoke Interop Assistant generated code that used the DllImport approach to setting up the API call. I expect this question has been answered loads of times before, but what are the advantages of using DllImport rather than Declare in your VB code? The obvious answer is that DllImport is a .NET way of doing things, but for VB6 programmers of the Declare statement looks much more natural. &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.aspx"&gt;DllImport&lt;/a&gt; does offer much finer control over the way the call is made, but unless you need this fine control you can stick with Declare.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9701569" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+6/default.aspx">Visual Basic 6</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+.NET/default.aspx">Visual Basic .NET</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Interop/default.aspx">Interop</category></item><item><title>Enhancing your VB6 Application with Interop</title><link>http://blogs.msdn.com/goto100/archive/2009/06/05/enhancing-your-vb6-application-with-interop.aspx</link><pubDate>Fri, 05 Jun 2009 19:21:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9701562</guid><dc:creator>Eric Nelson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/goto100/comments/9701562.aspx</comments><wfw:commentRss>http://blogs.msdn.com/goto100/commentrss.aspx?PostID=9701562</wfw:commentRss><description>&lt;p&gt;I’ve been having a look at some of the samples on the Visual Basic Resource Center to see what’s possible when we start using interop between VB6 and .NET. Here are some of my favourites.&lt;/p&gt;  &lt;p&gt;This article, &lt;a href="http://msdn.microsoft.com/en-gb/library/bb407304(VS.80).aspx"&gt;“Sharing ADO Recordsets Between Visual Basic 6 and Visual Basic 2005”&lt;/a&gt;, looks at approaches to sharing data between VB6 and .NET using the Interop Forms Toolkit. It also serves as a great reminder of the fact that Recordsets can operate in a disconnected mode just like a more modern Dataset. This disconnected mode is the mechanism used to shift the Recordsets from VB6 to .NET and back again.&lt;/p&gt;  &lt;p&gt;In the past, creating a multithreaded application in VB6 has been a bit of a challenge. Using Interop it’s now much easier to add this kind of functionality to a VB6 application. The trick here is to make use of the BackgroundWorker component (you could easily apply the same approach using any .NET component from VB6). See “&lt;a href="http://msdn.microsoft.com/en-us/library/aa719109.aspx"&gt;Using Background Threads with Visual Basic 6&lt;/a&gt;”.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/wh45kb66.aspx"&gt;ClickOnce deployment&lt;/a&gt; offers a very clean and simple model for delivering applications to the user’s desktop. At first sight it doesn’t look as if it would be possible to use ClickOnce to deploy a VB6 application because of all registration issues, but this blog post &lt;a href="http://blogs.msdn.com/bethmassi/archive/2007/06/27/deploying-interop-usercontrols.aspx"&gt;here&lt;/a&gt; by Beth shows you how you can make it work.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9701562" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+6/default.aspx">Visual Basic 6</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+.NET/default.aspx">Visual Basic .NET</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Interop/default.aspx">Interop</category></item><item><title>Adding to the My namespace in VB .NET</title><link>http://blogs.msdn.com/goto100/archive/2009/06/05/adding-to-the-my-namespace-in-vb-net.aspx</link><pubDate>Fri, 05 Jun 2009 19:16:49 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9701558</guid><dc:creator>Eric Nelson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/goto100/comments/9701558.aspx</comments><wfw:commentRss>http://blogs.msdn.com/goto100/commentrss.aspx?PostID=9701558</wfw:commentRss><description>&lt;p&gt;Just as an aside - after experimenting with the Interop Forms Toolkit earlier this year I wondered how InteropToolbox ended up in the My namespace – it seems like a useful thing to be able to do. I didn’t have to look far, the answer was in the ActiveXControlHelpers.vb file in my Usercontrol project:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="rem"&gt;'Adds the InteropToolbox to the My namespace&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;Namespace&lt;/span&gt; My&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="rem"&gt;'The HideModuleNameAttribute hides the module name MyInteropToolbox so the syntax becomes My.InteropToolbox.   &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &amp;lt;&lt;span class="kwrd"&gt;Global&lt;/span&gt;.Microsoft.VisualBasic.HideModuleName()&amp;gt; _&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Module&lt;/span&gt; MyInteropToolbox&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Private&lt;/span&gt; _toolbox &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; InteropToolbox&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;ReadOnly&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; InteropToolbox() &lt;span class="kwrd"&gt;As&lt;/span&gt; InteropToolbox&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            &lt;span class="kwrd"&gt;Get&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;                &lt;span class="kwrd"&gt;Return&lt;/span&gt; _toolbox&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Module&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Namespace&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;You might want to have a look at &lt;a href="http://msdn.microsoft.com/en-gb/library/ms379610(VS.80).aspx"&gt;this&lt;/a&gt; as well.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9701558" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+.NET/default.aspx">Visual Basic .NET</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Interop/default.aspx">Interop</category></item><item><title>That old friend Binary Compatibility – and a FREE eBook on COM Interop</title><link>http://blogs.msdn.com/goto100/archive/2009/06/05/that-old-friend-binary-compatibility-and-a-free-ebook-on-com-interop.aspx</link><pubDate>Fri, 05 Jun 2009 19:13:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9701552</guid><dc:creator>Eric Nelson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/goto100/comments/9701552.aspx</comments><wfw:commentRss>http://blogs.msdn.com/goto100/commentrss.aspx?PostID=9701552</wfw:commentRss><description>&lt;p&gt;A favourite topic for VB6 programmers! Adding a reference to a COM component in Visual Studio adds a reference to a specific version of the VB6 component, so rebuilding the VB6 component without binary compatibility will break the .NET project (you’ll have to re-add the reference to fix it). Switching on binary compatibility in the VB6 project will bring its own set of problems, so a better solution for an automated build would be to run TlbImp on your VB6 dll in your .NET project’s Pre-build event.&lt;/p&gt;  &lt;p&gt;I just discovered that &lt;a href="http://www.theserverside.net"&gt;TheServerSide.NET&lt;/a&gt; has a free book available covering all of the intricacies of .NET to COM interop , so if you want to delve any further take a look here: &lt;a href="http://www.theserverside.net/tt/articles/showarticle.tss?id=ComAndDotNetInterop_Book"&gt;COM and .NET Interoperability&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9701552" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+6/default.aspx">Visual Basic 6</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+.NET/default.aspx">Visual Basic .NET</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Interop/default.aspx">Interop</category></item><item><title>Screencasts on the Interop Forms Toolkit 2.0</title><link>http://blogs.msdn.com/goto100/archive/2009/02/05/screencasts-on-the-interop-forms-toolkit-2-0.aspx</link><pubDate>Thu, 05 Feb 2009 17:31:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9398599</guid><dc:creator>Eric Nelson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/goto100/comments/9398599.aspx</comments><wfw:commentRss>http://blogs.msdn.com/goto100/commentrss.aspx?PostID=9398599</wfw:commentRss><description>&lt;p&gt;[This is a short post to accompany the UK &lt;a href="http://www.microsoft.com/uk/vbmigration"&gt;Secure your Visual Basic 6.0 investment with Microsoft .NET&lt;/a&gt; initiative and is sourced from the &lt;a href="http://msdn.microsoft.com/en-gb/vbasic/bb466226.aspx#interop"&gt;main VB site&lt;/a&gt;]&lt;/p&gt;  &lt;p&gt;This how-to video series is focused on the Interop Forms Toolkit and working with Visual Basic .NET and Visual Basic 6 together. The Interop Forms Toolkit 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;&lt;a href="http://blogs.msdn.com/bethmassi/"&gt;&lt;em&gt;Presented by Beth Massi&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Download the Code: &lt;a href="http://blogs.msdn.com/bethmassi/attachment/3535632.ashx"&gt;Videos 1–3&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You will need: &lt;a href="http://msdn2.microsoft.com/en-us/vstudio/aa973782.aspx"&gt;Visual Studio&lt;/a&gt; and the &lt;a href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit 2.0&lt;/a&gt; in addition to Visual Basic 6.0&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-gb/vbasic/bb643843.aspx"&gt;#1 | How Do I: Build Interop Forms?&lt;/a&gt;     &lt;br /&gt;(11 minutes, 28 seconds)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-gb/vbasic/bb643844.aspx"&gt;#2 | How Do I: Build Interop User Controls?&lt;/a&gt;     &lt;br /&gt;(9 minutes, 3 seconds)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-gb/vbasic/bb643845.aspx"&gt;#3 | How Do I: Deploy Hybrid Applications?&lt;/a&gt;     &lt;br /&gt;(6 minutes, 1 second)&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9398599" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+6/default.aspx">Visual Basic 6</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+.NET/default.aspx">Visual Basic .NET</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Interop/default.aspx">Interop</category></item><item><title>New article on extending VB6.0 applications with the Interop Forms Toolkit 2.0</title><link>http://blogs.msdn.com/goto100/archive/2009/02/05/new-article-on-extending-vb6-0-applications-with-the-interop-forms-toolkit-2-0.aspx</link><pubDate>Thu, 05 Feb 2009 16:24:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9398438</guid><dc:creator>Eric Nelson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/goto100/comments/9398438.aspx</comments><wfw:commentRss>http://blogs.msdn.com/goto100/commentrss.aspx?PostID=9398438</wfw:commentRss><description>&lt;p&gt;I just wanted to swiftly share some useful links if you choose to extend a Visual Basic 6.0 application including a new article I commissioned in the UK – which turned out rather good.&lt;/p&gt;  &lt;p&gt;Firstly links to the toolkit download and some of the best existing articles.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The &lt;a href="http://msdn.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit 2.0&lt;/a&gt; which you need to download&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeproject.com/KB/vb-interop/VB6InteropToolkit2.aspx"&gt;Interop Forms Toolkit 2.0 Tutorial&lt;/a&gt; on Code Project which includes an example of using a WPF control inside a Windows Form as part of a Visual Basic 6.0 application&lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.foxite.com/bernardbout/archive/2007/06/20/4126.aspx"&gt;Using the Toolkit with Visual Foxpro&lt;/a&gt; – yep, you can use the toolkit with VFP9&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeproject.com/KB/dotnet/VB6_-_C__Interop_Form.aspx"&gt;Using C# with the Interop Forms Toolkit&lt;/a&gt; and useful &lt;a href="http://blogs.msdn.com/vbteam/archive/2007/06/01/so-what-does-lt-comclass-gt-actually-do.aspx"&gt;blog post from the team&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Which leads me to the &lt;a href="http://download.microsoft.com/documents/uk/msdn/vb6/Interop_Toolkit_Whitepaper.pdf"&gt;new article&lt;/a&gt; on using the Interop Forms Toolkit. This is a detailed, code heavy look at using the Interop Forms Toolkit which we are getting some great feedback on.&lt;/p&gt;  &lt;p&gt;It covers:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Installation and setup&lt;/li&gt;    &lt;li&gt;Interop Forms&lt;/li&gt;    &lt;li&gt;Interop UserControls&lt;/li&gt;    &lt;li&gt;Sharing data between managed and unmanaged code&lt;/li&gt;    &lt;li&gt;Debugging&lt;/li&gt;    &lt;li&gt;Deployment&lt;/li&gt;    &lt;li&gt;And recommendations on using it&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Enjoy.&lt;/p&gt;  &lt;p&gt;P.S.&amp;#160; I must admit I have never liked the name of this kit as it doesn’t really describe what it does - IMHO. I therefore often describe it as &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;The Add VB.NET Forms and Controls to your VB6 Application Toolkit&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;However that does it a disservice. It is broader than that. How about &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;The Add VB.NET or C# Forms and Controls to your VB6 Application Toolkit&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Or even more descriptively&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;The Add VB.NET or C# Forms and Controls to your VB6 or VFP9 Application Toolkit&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Or&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;The Add .NET Forms and Controls written in any .NET language to any COM based Application but it is much easier to use for VB6 and VB.NET Toolkit &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Ok I give in, Interop Forms Toolkit 2.0 it is :-)&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9398438" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+6/default.aspx">Visual Basic 6</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+.NET/default.aspx">Visual Basic .NET</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/goto100/archive/tags/UK/default.aspx">UK</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+2008/default.aspx">Visual Basic 2008</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+2005/default.aspx">Visual Basic 2005</category><category domain="http://blogs.msdn.com/goto100/archive/tags/DevCenter/default.aspx">DevCenter</category></item><item><title>Secure your Visual Basic 6.0 investment with Microsoft .NET</title><link>http://blogs.msdn.com/goto100/archive/2009/01/28/secure-your-visual-basic-6-0-investment-with-microsoft-net.aspx</link><pubDate>Wed, 28 Jan 2009 23:36:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9381745</guid><dc:creator>Eric Nelson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/goto100/comments/9381745.aspx</comments><wfw:commentRss>http://blogs.msdn.com/goto100/commentrss.aspx?PostID=9381745</wfw:commentRss><description>&lt;p&gt;[This is currently a UK only initiative but you will still find a lot of useful information on the new site and I know our partners are happy to engage worldwide]&lt;/p&gt;  &lt;p&gt;Over the last couple of months I have been working with Sarah in my group to pull together something which hopefully will help the many companies in the UK who continue to have a significant investment in Visual Basic 6.0&amp;#160; - and we did it with virtually no budget thanks to some great help and encouragement from &lt;a href="http://www.artinsoft.com/"&gt;Artinsoft&lt;/a&gt;, &lt;a href="http://www.vbmigration.com/"&gt;Code Architects&lt;/a&gt; and Avanade. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-gb/dd408373.aspx"&gt;Check out what we created&lt;/a&gt; if you are based in the United Kingdom and still have Visual Basic 6.0 applications running your company. Some of the highlights:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A great prize draw to win a free copy of a migration tool from Artinsoft or Code Architects (We have several to give away) &lt;/li&gt;    &lt;li&gt;Great offers from our partners. How about a entry level great migration tool for just £199 or 25% off a full blown enterprise class tool &lt;/li&gt;    &lt;li&gt;An attempt to summarise the five options you can take along with a 10 minute screencast by myself explaining the five options (and you can tell I had a cold when I recorded it!) &lt;/li&gt;    &lt;li&gt;Links to the best resources to find out more &lt;/li&gt;    &lt;li&gt;And a a brand new detailed article on the Interop Forms Toolkit which enables .NET forms and controls to be easily mixed with Visual Basic 6.0 forms and controls. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;P.S. The web page does have one or two “bugs” – but we will get them fixed on the next refresh.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9381745" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+6/default.aspx">Visual Basic 6</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+.NET/default.aspx">Visual Basic .NET</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Migration/default.aspx">Migration</category><category domain="http://blogs.msdn.com/goto100/archive/tags/UK/default.aspx">UK</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+2008/default.aspx">Visual Basic 2008</category><category domain="http://blogs.msdn.com/goto100/archive/tags/DevCenter/default.aspx">DevCenter</category></item><item><title>VB6 Interop and TlbImp vs AddRef</title><link>http://blogs.msdn.com/goto100/archive/2009/01/23/vb6-interop-and-tlbimp-vs-addref.aspx</link><pubDate>Fri, 23 Jan 2009 18:52:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9372789</guid><dc:creator>Eric Nelson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/goto100/comments/9372789.aspx</comments><wfw:commentRss>http://blogs.msdn.com/goto100/commentrss.aspx?PostID=9372789</wfw:commentRss><description>&lt;p&gt;I’d always assumed that creating a Runtime Callable Wrapper by adding a reference to the COM component in Visual Studio would generate the same interop code as was generated by using the command line tool TlbImp. That would seem &lt;b&gt;not&lt;/b&gt; to be true in at least one case that I’ve discovered, take this VB6 method code for example:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; ProcessArray(&lt;span class="kwrd"&gt;ByRef&lt;/span&gt; numbers() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; biggest &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    r = 0&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;For&lt;/span&gt; i = 0 &lt;span class="kwrd"&gt;To&lt;/span&gt; UBound(numbers)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="kwrd"&gt;If&lt;/span&gt; numbers(i) &amp;gt; r &lt;span class="kwrd"&gt;Then&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            r = numbers(i)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Next&lt;/span&gt; i&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    ProcessArray = r&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&lt;span class="kwrd"&gt;End&lt;/span&gt; Function&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Adding a reference in Visual Studio results in an interop method that looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/goto100/WindowsLiveWriter/VB6InteropandTlbImpvsAddRef_DF33/clip_image002_2.jpg"&gt;&lt;img title="clip_image002" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="189" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/goto100/WindowsLiveWriter/VB6InteropandTlbImpvsAddRef_DF33/clip_image002_thumb.jpg" width="277" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Which is not type safe (ByRef System.Array).&lt;/p&gt;

&lt;p&gt;Generating the wrapper using TlbImp gave me this signature:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/goto100/WindowsLiveWriter/VB6InteropandTlbImpvsAddRef_DF33/clip_image004_2.jpg"&gt;&lt;img title="clip_image004" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="154" alt="clip_image004" src="http://blogs.msdn.com/blogfiles/goto100/WindowsLiveWriter/VB6InteropandTlbImpvsAddRef_DF33/clip_image004_thumb.jpg" width="243" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why do we get this difference? Visual Studio still runs TlbImp, but with the /sysarray switch which forces the use of System.Array. The advantage of the System.Array is that it supports non-zero lower bounds! Check the documentation for its CreateInstance method.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9372789" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+6/default.aspx">Visual Basic 6</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+.NET/default.aspx">Visual Basic .NET</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/goto100/archive/tags/DevCenter/default.aspx">DevCenter</category></item><item><title>Heads up – The VB6 upgrade guide was written before we released the Interop Forms Toolkit</title><link>http://blogs.msdn.com/goto100/archive/2009/01/23/heads-up-the-vb6-upgrade-guide-was-written-before-we-released-the-interop-forms-toolkit.aspx</link><pubDate>Fri, 23 Jan 2009 18:42:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9372776</guid><dc:creator>Eric Nelson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/goto100/comments/9372776.aspx</comments><wfw:commentRss>http://blogs.msdn.com/goto100/commentrss.aspx?PostID=9372776</wfw:commentRss><description>&lt;p&gt;I have been re-reading the &lt;a href="http://msdn.microsoft.com/en-gb/library/aa480541.aspx"&gt;”Upgrading Visual Basic 6.0 Applications to Visual Basic .NET and Visual Basic 2005”&lt;/a&gt; guide lately which discusses phased migrations where individual application components are upgraded independently (which I prefer to call “Extending with .NET”). This approach relies on COM Interop to get the old VB6 components talking to the new .NET components – which is great for Business Logic. What the guide doesn’t address are the possibilities opened up by the &lt;a href="http://msdn.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit&lt;/a&gt; which was released after the guide was written. The Toolkit (amongst other things) allows an application to mix Visual Basic .NET User Interface (UI) with VB6 UI. E.g. An application with 100 VB6 forms could have the 101st form written in Visual Basic .NET – and the users would never know. &lt;/p&gt;  &lt;p&gt;It is a real shame we didn’t have the Interpop Forms Toolkit in place when we released the first version of Visual Basic .NET back in 2002. It would have significantly simplified the roadmap and effort involved for companies with VB6 applications. &lt;/p&gt;  &lt;p&gt;NB: You can also use &lt;a href="http://www.codeproject.com/KB/vb-interop/VB6InteropToolkit2.aspx"&gt;C# with the Interop Forms Toolkit&lt;/a&gt; to extend VB6 applications.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9372776" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+6/default.aspx">Visual Basic 6</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+.NET/default.aspx">Visual Basic .NET</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/goto100/archive/tags/DevCenter/default.aspx">DevCenter</category></item><item><title>Feedback appreciated on draft screencast on VB6 and the options to move to .NET</title><link>http://blogs.msdn.com/goto100/archive/2008/12/11/feedback-appreciated-on-draft-screencast-on-vb6-and-the-options-to-move-to-net.aspx</link><pubDate>Thu, 11 Dec 2008 20:04:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9197459</guid><dc:creator>Eric Nelson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/goto100/comments/9197459.aspx</comments><wfw:commentRss>http://blogs.msdn.com/goto100/commentrss.aspx?PostID=9197459</wfw:commentRss><description>&lt;p&gt;I am working with partners to pull together guidelines, resources and special promotions on tools to help UK companies with VB6 make the right choice around moving (or not) to .NET. This will happen early in 2009. There will be a new landing page with the information and on that page will be a link to a 10minute overview screencast. I have created this "draft". Would welcome folks comments. &lt;/p&gt; &lt;p&gt;P.S. It is a draft because it contains some glitches, some odd sound and I sound a little bored at times :-) I'm also not as succinct as I would have liked :-)&lt;/p&gt;&lt;iframe style="width: 500px; height: 375px" src="http://silverlight.services.live.com/invoke/72662/VB6%20and%20the%20.NET%20Framework/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9197459" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+6/default.aspx">Visual Basic 6</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+.NET/default.aspx">Visual Basic .NET</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Migration/default.aspx">Migration</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+2008/default.aspx">Visual Basic 2008</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+2005/default.aspx">Visual Basic 2005</category><category domain="http://blogs.msdn.com/goto100/archive/tags/DevCenter/default.aspx">DevCenter</category></item><item><title>Upgrading VB6 applications – a moment to reflect :-)</title><link>http://blogs.msdn.com/goto100/archive/2008/11/18/upgrading-vb6-applications-a-moment-to-reflect.aspx</link><pubDate>Wed, 19 Nov 2008 00:36:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9120299</guid><dc:creator>Eric Nelson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/goto100/comments/9120299.aspx</comments><wfw:commentRss>http://blogs.msdn.com/goto100/commentrss.aspx?PostID=9120299</wfw:commentRss><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I’ve now spent a bit of time with the book &lt;a href="http://msdn.microsoft.com/en-gb/library/aa480541.aspx"&gt;”Upgrading Visual Basic 6.0 Applications to Visual Basic .NET and Visual Basic 2005”&lt;/a&gt;, so what are my thoughts about it? The good news is it remains a comprehensive and valuable resource for anyone planning to move their VB6 applications to .NET. However it is worth remembering that:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;It focuses on upgrading rather than interoperating (Covered as &lt;strong&gt;Reuse&lt;/strong&gt; in my earlier post on &lt;a title="Rewrite vs Migrate vs Reuse vs Replace" href="http://blogs.msdn.com/goto100/archive/2008/11/03/rewrite-vs-migrate-vs-reuse-vs-replace.aspx"&gt;Rewrite vs Migrate vs Reuse vs Replace&lt;/a&gt;). It was written prior to the development of the &lt;a href="http://msdn.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit&lt;/a&gt; which makes combining VB6 and .NET much easier.&amp;#160; &lt;/li&gt;    &lt;li&gt;It doesn’t cover any .NET 3.0 or .NET 3.5 topics – nor Visual Studio 2008.&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9120299" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+6/default.aspx">Visual Basic 6</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+.NET/default.aspx">Visual Basic .NET</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Migration/default.aspx">Migration</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+2008/default.aspx">Visual Basic 2008</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+2005/default.aspx">Visual Basic 2005</category><category domain="http://blogs.msdn.com/goto100/archive/tags/DevCenter/default.aspx">DevCenter</category></item><item><title>Functional Equivalence vs Application Advancement (and Vertical vs Horizontal)</title><link>http://blogs.msdn.com/goto100/archive/2008/11/11/functional-equivalence-vs-application-advancement-and-vertical-vs-horizontal.aspx</link><pubDate>Tue, 11 Nov 2008 12:10:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9059483</guid><dc:creator>Eric Nelson</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/goto100/comments/9059483.aspx</comments><wfw:commentRss>http://blogs.msdn.com/goto100/commentrss.aspx?PostID=9059483</wfw:commentRss><description>&lt;p&gt;These are a couple of useful terms I’ve picked up from the &lt;a href="http://msdn.microsoft.com/en-gb/library/aa480541.aspx"&gt;”Upgrading Visual Basic 6.0 Applications to Visual Basic .NET and Visual Basic 2005”&lt;/a&gt; guide (I really need an acronym to refer to this book!). They refer to two stages of the upgrade process: &lt;strong&gt;&lt;em&gt;Functional equivalence&lt;/em&gt;&lt;/strong&gt; means that your .NET application has the same functionality as your VB6 application and the recommendation is that you should get to this stage before you start working on application advancement. &lt;strong&gt;&lt;em&gt;Application advancement&lt;/em&gt;&lt;/strong&gt; is when you start adding new or improved functionality, and where you can start to benefit from all the features of the .NET Framework. In many cases I see teams are asked to deliver both in parallel (as I discussed &lt;a href="http://blogs.msdn.com/goto100/archive/2008/11/03/rewrite-vs-migrate-vs-reuse-vs-replace.aspx"&gt;previously&lt;/a&gt;) and the end result is at best a lot of late nights and at worst, nothing is ultimately delivered. &lt;/p&gt;  &lt;p&gt;Another useful concept discussed in the guide is &lt;strong&gt;&lt;em&gt;vertical&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;horizontal upgrades&lt;/em&gt;&lt;/strong&gt;. A vertical upgrade tackles a vertical slice through all the layers of an application, while a horizontal upgrade deals with a single layer of the application at a time. Which approach makes sense will depend on the architecture of your application. Many teams I have engaged understand the benefits of working with a vertical slice but it is interesting to see that in many cases they choose a poor or incomplete vertical slice. Common mistakes I have seen when teams scope the vertical slice include:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A vertical slice which fails to include reporting and archiving – leaving key implementation details until later&lt;/li&gt;    &lt;li&gt;A vertical slice which fails to consider data volumes – the vertical slice is run against virtually empty tables, which masks significant issues with the implementation&lt;/li&gt;    &lt;li&gt;A vertical slice which fails to consider concurrency – the vertical slice is never run within the context of simulated load, again masking significant issues&lt;/li&gt;    &lt;li&gt;A vertical slice which fails to include interop with existing systems – despite interop being a key requirement of the solution&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;There are plenty of other examples – but failure to consider the above four can easily lead to significant difficulties later on in a migration project.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9059483" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+.NET/default.aspx">Visual Basic .NET</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Migration/default.aspx">Migration</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+2008/default.aspx">Visual Basic 2008</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+2005/default.aspx">Visual Basic 2005</category><category domain="http://blogs.msdn.com/goto100/archive/tags/DevCenter/default.aspx">DevCenter</category></item><item><title>Interview with Richard Warnett of Financial Objects on their decision to go with Visual Basic .NET</title><link>http://blogs.msdn.com/goto100/archive/2008/11/03/interview-with-richard-warnett-of-financial-objects-on-their-decision-to-go-with-visual-basic-net.aspx</link><pubDate>Mon, 03 Nov 2008 17:38:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9033321</guid><dc:creator>Eric Nelson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/goto100/comments/9033321.aspx</comments><wfw:commentRss>http://blogs.msdn.com/goto100/commentrss.aspx?PostID=9033321</wfw:commentRss><description>&lt;p&gt;A big thanks to Richard for taking the time to do this. I have known &lt;a href="http://www.finobj.com/"&gt;Financial Objects&lt;/a&gt; for many years and have been impressed with how they have successfully taken forward their VB6 investment onto .NET using Visual Basic .NET. &lt;/p&gt; &lt;p&gt;I would love to do a few more of these with UK companies who have happily made the switch from VB6 to .NET or have selected Visual Basic over C# for .NET development. Please do &lt;a href="http://blogs.msdn.com/goto100/contact.aspx"&gt;contact me&lt;/a&gt; if you would be happy to do this. Thanks.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;Richard, could you just say a few words about your role in Financial Objects?&lt;/em&gt;&lt;/strong&gt; &lt;p&gt;I am chief architect and product director for our Microsoft platform retail banking solution: &lt;i&gt;activebank&lt;/i&gt;.&amp;nbsp; I also provide architectural and technology strategy support to other product teams as well as advising the board on technology matters. I have worked with the &lt;i&gt;activebank&lt;/i&gt; solution for 14 years now and have followed Microsoft’s enterprise technologies and more importantly, Visual Basic, through that period.&amp;nbsp; In my role I am concerned with the entire development lifecycle, including post-deployment support, which I believe brings a healthy dose of caution and realism when considering the adoption of new technologies, methodologies and approaches.&amp;nbsp; We operate an on-shore / off-shore model for the development and support of this product and this arrangement has provided me with fantastic opportunities to focus on the processes as well as the nitty-gritty day-to-day technology of coding. &lt;p&gt;&lt;strong&gt;&lt;em&gt;I understand that many of your products started out using Visual Basic 6 and earlier. When you decided to move to .NET did you consider also moving to C#?&lt;/em&gt;&lt;/strong&gt; &lt;p&gt;We certainly considered all of the dishes that were on the Microsoft menu at the time .NET was introduced.&amp;nbsp; We were fortunate to be working with Microsoft under a Premier Support for Developers agreement (PSfD, now Microsoft Partner Advantage – MSPA) at the time, which gave us privileged access to those &lt;i&gt;in the know&lt;/i&gt; and for us to be able to have frank and open discussions about the variances between the languages.&amp;nbsp; &lt;p&gt;The demonstration of the MSIL generated out of the languages was enough for me to understand that we would not be making a technical compromise by choosing to stick with Visual Basic, and so we were free to make the decision on the basis of what suited our organisation best. &lt;p&gt;Given that we had a large and capable team of Visual Basic developers, a large repository of Visual Basic source code that needed to be supported, and a healthy backlog of work to deliver, the decision to move ahead with Visual Basic was a fairly trivial one for us! &lt;p&gt;&lt;strong&gt;&lt;em&gt;Do you have any regrets about deciding to go with Visual Basic .NET?&lt;/em&gt;&lt;/strong&gt; &lt;p&gt;I regret that Microsoft did not do more to make VB.NET appear cooler and sexier to developers than C#.&amp;nbsp; The result has been years of developers jumping to the conclusion that C# is the more a able and comprehensive language than VB when that is so clearly not the case.&amp;nbsp; For us, this meant that we had some casualties in the early days in terms of experienced developers jumping ship to work with C#. &lt;p&gt;But, other than that minor gripe, no real regrets at all. &lt;p&gt;&lt;strong&gt;&lt;em&gt;What approach have you taken to moving Visual Basic 6 applications onto .NET? Did you create or buy any tools to help you?&lt;/em&gt;&lt;/strong&gt; &lt;p&gt;We were fairly masochistic about it.&amp;nbsp; We saw the re-engineering to .NET as an opportunity to make some worthwhile advances with our application architecture and development processes, rather than taking a sausage-machine approach to getting onto .NET.&amp;nbsp; Consequently, we built a new application framework from the ground up; we re-designed our use of modelling in the development process; and we produced the patterns we needed to be able to integrate both &lt;i&gt;new&lt;/i&gt; .NET components and existing COM component in the same deployment. &lt;p&gt;&lt;strong&gt;&lt;em&gt;What would be your advice for a company with a significant investment in VB6?&lt;/em&gt;&lt;/strong&gt; &lt;p&gt;“Don’t Panic!”&amp;nbsp; I feel that there has been an growing amount of uncertainty perpetuating around our industry, and consequently among our customers, regarding the implications of operating a strategic solution that may be built in part or completely from VB6 code.&amp;nbsp; This has resulted in some “from the hip” demands that software vendors immediately address the “problem” of supplying a solution that is built with an “unsupported” development product. &lt;p&gt;My advice is that anyone responsible for a strategic solution that is in part or whole VB6 must now set themselves a target as part of their product roadmap to engineer out the remaining VB6 components.&amp;nbsp; They must not feel pressured into removing the VB6 code in any radical way, though.&amp;nbsp; They have time to do it the way that works best for them, their team and their customer.&amp;nbsp; The old adage “don’t bite off more than you can chew” applies here: deal with the re-engineering of the VB6 code as a requirement in its own right.&amp;nbsp; Don’t be tempted to re-architect from the ground up right now (unless that was on the roadmap already and you can afford to put product development on hold for some time). &lt;p&gt;&lt;strong&gt;&lt;em&gt;And finally, what new technologies from Microsoft are you most looking forward to using in the future?&lt;/em&gt;&lt;/strong&gt; &lt;p&gt;Visual Basic 10.&amp;nbsp; Visual Basic 11.&amp;nbsp; Visual Basic 12... &lt;p&gt;Entity framework is looking like a ‘worthy of a prod’ type of technology, so I’m looking to get that at least into a lab environment to see what it can do for us in more detail, along with the associated goodies like ADO.NET data services. Team Foundation Server, while not really in the ‘new’ category, is still in the process of being adopted across all of the projects and so I am working to get that up and running across the board.&amp;nbsp; As a distributed development shop it clearly has lots to offer us. The 2008s (Windows Server, SQL Server and Visual Studio) are all foundations of the work we have in the development shop now that will be deployed in the next product release. Business Intelligence is an area that we are interested in right now and can see that the current offerings from Microsoft in this area could help us to deliver some smart solutions. Lastly, we care keeping an eye on the ‘user experience’ space to work out what improvements we can make to our user interfaces without just adding bling for the sake of it. &lt;p&gt;There’s lots going on and it’s a good industry to be involved in as much as ever, if not more so. &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: We did this interview several weeks back and for some reason it “escaped” my Inbox into a sub-folder without ever making it onto this blog. I only just rediscovered it whilst unsuccessfully trying to find it on this blog! Sorry.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9033321" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+6/default.aspx">Visual Basic 6</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Migration/default.aspx">Migration</category><category domain="http://blogs.msdn.com/goto100/archive/tags/UK/default.aspx">UK</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Interview/default.aspx">Interview</category></item><item><title>Rewrite vs Migrate vs Reuse vs Replace</title><link>http://blogs.msdn.com/goto100/archive/2008/11/03/rewrite-vs-migrate-vs-reuse-vs-replace.aspx</link><pubDate>Mon, 03 Nov 2008 16:59:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9033180</guid><dc:creator>Eric Nelson</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/goto100/comments/9033180.aspx</comments><wfw:commentRss>http://blogs.msdn.com/goto100/commentrss.aspx?PostID=9033180</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-gb/library/aa480541.aspx"&gt;“Upgrading Visual Basic 6.0 Applications to Visual Basic .NET and Visual Basic 2005”&lt;/a&gt; is a great resource for anyone looking at upgrading from VB6 to .NET. The guide was developed jointly by the Microsoft patterns &amp;amp; practices team and &lt;a href="http://www.artinsoft.com/"&gt;ArtinSoft&lt;/a&gt;. See my interview with ArtinSoft &lt;a href="http://blogs.msdn.com/goto100/archive/2008/06/10/interview-with-artinsoft-ceo-roberto-leit-n-garro.aspx"&gt;CEO Roberto Leiton Garro&lt;/a&gt;. It was written some time back and things have moved on – but it still represents a great source of information. &lt;p&gt;One of the first issues the guide addresses is the question “Should we upgrade?”, neatly summarised by this diagram. &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/goto100/WindowsLiveWriter/RewritevsMigratevsReusevsReplace_C4C9/clip_image002_2.jpg"&gt;&lt;img title="clip_image002" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="292" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/goto100/WindowsLiveWriter/RewritevsMigratevsReusevsReplace_C4C9/clip_image002_thumb.jpg" width="606" border="0"&gt;&lt;/a&gt; &lt;p&gt;The four options are: &lt;ul&gt; &lt;li&gt;Migrate. Automated migration process using Visual Studio or 3&lt;sup&gt;rd&lt;/sup&gt; party tool.&lt;/li&gt; &lt;li&gt;Reuse. Interoperate – extend and upgrade.&lt;/li&gt; &lt;li&gt;Rewrite. Start over.&lt;/li&gt; &lt;li&gt;Replace. Look for a package solution or outsource.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Many companies I worked with in the early days of .NET looked first at &lt;strong&gt;&lt;em&gt;Rewrite &lt;/em&gt;&lt;/strong&gt;driven in part by a strong desire to improve the underlying architecture and code structures at the same time as they moved to .NET. Unfortunately many of those projects run into difficulty and several were never completed. The problem they were trying to solve was too large:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Clean/improve the architecture and codebase&amp;nbsp; &lt;strong&gt;and&lt;/strong&gt; &lt;/li&gt; &lt;li&gt;Be competent in a completely new development stack on a large project from day one &lt;strong&gt;and &lt;/strong&gt;&lt;/li&gt; &lt;li&gt;Simultaneously add additional new functionality to justify to the business the time and effort expended &lt;strong&gt;and&lt;/strong&gt;&lt;/li&gt; &lt;li&gt;In many cases also introduce new software development practices.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Hence I&amp;nbsp; quickly became a fan of &lt;strong&gt;&lt;em&gt;Migrate&lt;/em&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;em&gt;Reuse&lt;/em&gt;&lt;/strong&gt; as the right approach for most companies. Interestingly though, &lt;strong&gt;&lt;em&gt;Rewrite&lt;/em&gt;&lt;/strong&gt; is a less risky option than it once was. Many companies who still have significant VB6 projects also now have strong .NET skills gained on other projects, improved software development practices (including automated tests – a must IMHO for &lt;strong&gt;&lt;em&gt;Rewrite&lt;/em&gt;)&lt;/strong&gt; and have even taken the time to refactor elements of their VB6 codebase over the last 6 years. That said, I would still place &lt;strong&gt;&lt;em&gt;Rewrite&lt;/em&gt;&lt;/strong&gt; below &lt;strong&gt;&lt;em&gt;Migrate&lt;/em&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;em&gt;Reuse &lt;/em&gt;&lt;/strong&gt;for most companies.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9033180" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+6/default.aspx">Visual Basic 6</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+.NET/default.aspx">Visual Basic .NET</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Migration/default.aspx">Migration</category></item><item><title>Moving from VB6 to VB.NET – time for a poll…</title><link>http://blogs.msdn.com/goto100/archive/2008/11/03/moving-from-vb6-to-vb-net-time-for-a-poll.aspx</link><pubDate>Mon, 03 Nov 2008 16:30:06 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9033064</guid><dc:creator>Eric Nelson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/goto100/comments/9033064.aspx</comments><wfw:commentRss>http://blogs.msdn.com/goto100/commentrss.aspx?PostID=9033064</wfw:commentRss><description>&lt;p&gt;Back in April I posted a &lt;a href="http://blogs.msdn.com/ericnel/archive/2008/04/25/visual-basic-6-migration-to-net.aspx"&gt;summary&lt;/a&gt; of some of the resources I’d found which look useful to anyone involved in the move from VB6 to .NET. Over the next few weeks I’m going to dig into this whole area in a bit more detail, starting with a bit of &lt;a href="http://msdn.microsoft.com/en-gb/library/aa480541.aspx"&gt;reading&lt;/a&gt;. I’m also going to find out what’s new or changed in the upgrade options that are available to VB6 developers in Visual Studio 2008.  &lt;p&gt;I would be interested to know what people are currently up to with their VB6 applications.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;iframe src="http://polls.zoho.com/external/ericnel/what-are-your-plans-around-vb6-applications" frameborder="0" width="400" height="400"&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9033064" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+6/default.aspx">Visual Basic 6</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Visual+Basic+.NET/default.aspx">Visual Basic .NET</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/goto100/archive/tags/Migration/default.aspx">Migration</category></item></channel></rss>