<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" version="2.0">
  <channel>
    <title>VB Migration Partner</title>
    <description>blog</description>
    <link>http://www.vbmigration.com/Blog/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.Net Syndication Generator 1.0.0.0 (http://dotnetblogengine.net/)</generator>
    <language>en-GB</language>
    <blogChannel:blogRoll>http://www.vbmigration.com/Blog/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.vbmigration.com/blog/syndication.axd</blogChannel:blink>
    <dc:creator>My name</dc:creator>
    <dc:description>blog</dc:description>
    <dc:title>VB Migration Partner</dc:title>
    <geo:lat>100.000000</geo:lat>
    <geo:long>100.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/VbMigrationPartner" type="application/rss+xml" /><item>
      <title>Bugs that drove us crazy</title>
      <description>&lt;p&gt;
We all know that writing software requires a vast assortment of skills and, above all, a lot of patience. You usually need the latter to feel comfortable when you realize that you&amp;#39;ve wasted hours and days over someone else&amp;#39;s bug.&amp;nbsp; Here&amp;#39;s the story.
&lt;/p&gt;
&lt;p&gt;
Like many commercial applications, VB Migration Partner has a splash screen. No big deal. VB Migration Partner is written in VB2005, therefore we could use VB.NET application framework. As a matter of fact, defining a splash screen in VB.NET is as easy as selecting an item in a combobox in the Application tab of the My Project designer.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.vbmigration.com/Blog/image.axd?picture=VBNET_AppFramework2.gif" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
During the beta test period a few users reported that at times VB
Migration Partner threw an exception at launch, immediately after
closing the splash screen. We never managed to reproduce the problem on
our computers. Fortunately the exception occured quite rarely. Until a
user running Windows 2000 reported that he was seeing the exception at
nearly every launch. After installing VB Migration Partner on Windows
2000 in our lab, we could indeed verify that we had a problem.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
It took a while to find out that we weren&amp;#39;t&amp;nbsp; the only ones suffering
from this issue. As a matter of fact, Microsoft recognizes that it is a
VB.NET bug. Fortunately, they also offer a workaround. According to
whis workaround you must create an invisible form from inside the
Form_Load event of your splash screen, something like this:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp; Private Sub Form_Load(ByVal sender As Object, ByVal e As EventArgs) _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Handles MyBase.Load&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim frm As New Form&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frm.Opacity = 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frm.ShowInTaskbar = False&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frm.FormBorderStyle = FormBorderStyle.None&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frm.Show()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return frm&lt;br /&gt;
&amp;nbsp;&amp;nbsp; End Function 
&lt;/p&gt;
&lt;p&gt;
Unbelievably, this code makes the problem vanish away! You can find more details in this &lt;a href="http://connect.microsoft.com/VisualStudio/feedback/Workaround.aspx?FeedbackID=114918" target="_blank"&gt;Microsoft KB article.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
We realized that *all* applications written in VB.NET could suffer
from this issue, thus we added a method to our support library, named &lt;strong&gt;SplashScreenBugFix6&lt;/strong&gt;,
which creates the invisible form for you. You just need to add an
InsertStatement pragma in the original VB6 splash screen form, so that
a call to this method is automatically generated anytime you convert
the VB6 project:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; in the VB6 project&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Sub Form_Load()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;## InsertStatement SplashScreenBugFix()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; more code in the Load event&lt;br /&gt;
&amp;nbsp;&amp;nbsp; End Sub
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=Gy9CaI"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=Gy9CaI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=pmBeuI"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=pmBeuI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.vbmigration.com/Blog/post/2008/06/Bugs-that-drove-us-crazy.aspx</link>
      <author>Francesco Balena</author>
      <comments>http://www.vbmigration.com/Blog/post/2008/06/Bugs-that-drove-us-crazy.aspx#comment</comments>
      <guid>http://www.vbmigration.com/Blog/post.aspx?id=b8609ee0-6bf3-4004-a652-f6c13d5d3d3d</guid>
      <pubDate>Wed, 25 Jun 2008 00:02:00 -0700</pubDate>
      <category>VB.NET</category>
      <category>VB Migration Partner</category>
      <dc:publisher>Francesco Balena</dc:publisher>
      <pingback:server>http://www.vbmigration.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.vbmigration.com/Blog/post.aspx?id=b8609ee0-6bf3-4004-a652-f6c13d5d3d3d</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.vbmigration.com/Blog/trackback.axd?id=b8609ee0-6bf3-4004-a652-f6c13d5d3d3d</trackback:ping>
      <wfw:comment>http://www.vbmigration.com/Blog/post/2008/06/Bugs-that-drove-us-crazy.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.vbmigration.com/Blog/syndication.axd?post=b8609ee0-6bf3-4004-a652-f6c13d5d3d3d</wfw:commentRss>
    </item>
    <item>
      <title>Neat tricks for smooth migration of calls to Windows API methods</title>
      <description>VB Migration Partner does a superb in dealing with Windows API calls. Here&amp;#39;s a summary of the features that it supports and that are out of reach for the Upgrade Wizard included in Visual Studio 2005/2008:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
	&lt;li&gt;converts As Any parameters, by creating all the necessary overloads&lt;/li&gt;
	&lt;li&gt;deals correctly with API methods that take a callback address (e.g. EnumWindows, EnumFonts)&lt;/li&gt;
	&lt;li&gt;provides recommendation about the .NET object/method that can effectively replace the API method; we cover 300+ different API calls. (Enterprise Edition only)&lt;/li&gt;
	&lt;li&gt;in a few cases, it automatically replace API calls with calls to the corresponding .NET object/method&lt;/li&gt;
	&lt;li&gt;ensures that string immutability doesn&amp;#39;t prevent the VB.NET code from working correctly (see &lt;a href="http://www.vbmigration.com/Blog/detknowledgebase.aspx?Id=52" target="_blank"&gt;this article&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;generates the correct MarshalAs attributes for elements in Type (Structure) blocks&lt;/li&gt;
	&lt;li&gt;correctly translates fixed-length strings inside Type blocks, so that they work correctly when passed to the Windows API method&lt;/li&gt;
	&lt;li&gt;automatically initializes static arrays inside Type blocks, so that you don&amp;#39;t get unexpected crashes when invoking an API method that expects to find a buffer there&lt;/li&gt;
	&lt;li&gt;creates a wrapper method that ensures that orphaned delegates don&amp;#39;t cause an unexpected runtime exception, an advanced programming technique discussed in &lt;a href="http://www.vbmigration.com/Blog/detknowledgebase.aspx?Id=51" target="_blank"&gt;this KB article&lt;/a&gt; (Enterprise Edition only)&lt;/li&gt;
	&lt;li&gt;includes the VB6WindowsSubclasser class that helps you correctly migrate subclassing-based techniques (as explained &lt;a href="http://www.vbmigration.com/Blog/detknowledgebase.aspx?Id=58" target="_blank"&gt;here&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
In spite of all these innovations, there are cases when you still need to manually edit either the original VB6 code or the converted VB.NET. This happens, for example, if the original code uses the VarPtr, StrPtr, or ObjPtr functions to pass memory pointers to an external API method. These three functions aren&amp;#39;t supported under VB.NET and there is no simple way to simulate them.&lt;br /&gt;
&lt;br /&gt;
The good news is that in the vast majority of cases you don&amp;#39;t need to deal with memory pointers under .NET, because the .NET Framework offer a valid &amp;quot;pure&amp;quot; alternative to the API method in question. In this article I&amp;#39;ll illustrate how you can take advantage of VB Migration Partner features to reduce manual edits to the very minimum and take advantage of the convert-test-fix methodology. &lt;br /&gt;
&lt;br /&gt;
For simplicity&amp;#39;s sake, let&amp;#39;s focus on one of the simplest API methods, the GetSystemDirectory Windows API. Here&amp;#39;s a piece of VB6 code that displays the system directory path:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Main.Bas module&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Public Declare Function GetSystemDirectory Lib &amp;quot;kernel32.dll&amp;quot; Alias &amp;quot;GetSystemDirectoryA&amp;quot; _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (ByVal lpBuffer As String, ByVal nSize As Long) As Long&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Sub Main()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Dim buffer As String, length As Long, windir As String&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; buffer = Space(256)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; length = GetSystemDirectory(buffer, Len(buffer))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; winDir = Left(buffer, length)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox winDir&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;br /&gt;
&lt;br /&gt;
The first step is in refactoring this code so that you make all the Declares private and move them to another BAS module, that exposes them by means of standard VB6 methods. (If you usually write tidy and maintainable VB6 code, odds are that you have already taken this step.)&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; This is the APIHelpers.Bas file&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Declare Function GetSystemDirectory Lib &amp;quot;kernel32.dll&amp;quot; Alias &amp;quot;GetSystemDirectoryA&amp;quot; _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (ByVal lpBuffer As String, ByVal nSize As Long) As Long&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; returns the Windows directory&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Public Function SystemDirectory() As String&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Dim buffer As String, length As Long&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; buffer = Space(256)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; length = GetSystemDirectory(buffer, Len(buffer))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SystemDirectory = Left(buffer, length)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; End Function &lt;br /&gt;
&lt;br /&gt;
The code that actually displays or otherwise uses the Windows directory path is now simpler. Notice that we explicitly include the module name (APIHelpers) in the method call. This tip reduces the odds that another method with same name exists elsewhere in the project, but the technique explained later works even if you don&amp;#39;t include such a name:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; the Main.Bas module&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Sub Main()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Dim windir As String&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; winDir = APIHelpers.SystemDirectory&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox winDir&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;br /&gt;
&lt;br /&gt;
At this point you have a VB6 project that works exactly like the original one, but it is better organized and structured, with all Declares statements gathered in one single module. Let&amp;#39;s see how to migrate this code to VB.NET and get rid of all dependencies from non-NET code.&lt;br /&gt;
&lt;br /&gt;
First and foremost, we prepare a VB.NET module that exposes the same methods as the original APIHelpers.bas but doesn&amp;#39;t use any Declare statement. Here&amp;#39;s how we can render the SystemDirectory function using native .NET calls:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; This is the APIHelpers.vb file (VB.NET)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Module APIHelpers&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Public Function SystemDirectory() As String&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Return Environment.SystemDirectory&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; End Function&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; End Module&lt;br /&gt;
&lt;br /&gt;
Next, we use an ExcludeCurrentFile pragma to exclude the APIHelpers.bas VB6 module from migration process and we use an AddSourceFile pragma to add the APIHelpers.vb VB.NET file to the converted Visual Studio project. The neat result is that the code in Main now calls the .NET version of the method, which doesn&amp;#39;t use any unmanaged calls:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; This is the APIHelpers.Bas file&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;## ExcludeCurrentFile &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;## AddSourceFile &amp;quot;c:\vbnet\modules\apihelpers.vb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Declare Function GetSystemDirectory Lib &amp;quot;kernel32.dll&amp;quot; Alias &amp;quot;GetSystemDirectoryA&amp;quot; _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (ByVal lpBuffer As String, ByVal nSize As Long) As Long&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; ... remainder of module as before...&lt;br /&gt;
&lt;br /&gt;
This solution works great, but we can improve it. In fact, a (minor) problem is that the resulting VB.NET code still uses wrapper methods and doesn&amp;#39;t look like the &amp;quot;native&amp;quot; .NET code that an experienced VB.NET developer would write. Fear not, because all you need is a project-level PostProcess pragma:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; This is the APIHelpers.Bas file&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;## ExcludeCurrentFile &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;## project:PostProcess &amp;quot;(APIHelpers\.)?SystemDirectory&amp;quot;, &amp;quot;Environment.SystemDirectory&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Notice that I dropped the AddSourceFile pragma because you don&amp;#39;t need the wrapper method any longer (at least in this simplified example). Using similar techniques you can provide a .NET equivalent for most methods that require API calls under VB6, including methods that take arguments. &lt;br /&gt;
&lt;br /&gt;
One of the long-terms goals we have in Code Architects is to apply these concepts on a larger scale to create VB6 helper modules and their corresponding VB.NET versions, to help all VB6 developers to easily migrate their API-intensive applications. Just stay tuned, as usual!&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=WOa6lI"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=WOa6lI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=3SssAI"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=3SssAI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.vbmigration.com/Blog/post/2008/06/Neat-tricks-for-smooth-migration-of-calls-to-Windows-API-methods.aspx</link>
      <author>Francesco Balena</author>
      <comments>http://www.vbmigration.com/Blog/post/2008/06/Neat-tricks-for-smooth-migration-of-calls-to-Windows-API-methods.aspx#comment</comments>
      <guid>http://www.vbmigration.com/Blog/post.aspx?id=2ec98577-4b5d-472e-85d5-cd1f25ca7182</guid>
      <pubDate>Thu, 12 Jun 2008 21:13:00 -0700</pubDate>
      <category>VB.NET</category>
      <category>VB Migration Partner</category>
      <category>Optimization</category>
      <category>VB6</category>
      <dc:publisher>Francesco Balena</dc:publisher>
      <dc:description>A simple technique that lets you replace API calls with the corresponding .NET methods and objects</dc:description>
      <pingback:server>http://www.vbmigration.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.vbmigration.com/Blog/post.aspx?id=2ec98577-4b5d-472e-85d5-cd1f25ca7182</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.vbmigration.com/Blog/trackback.axd?id=2ec98577-4b5d-472e-85d5-cd1f25ca7182</trackback:ping>
      <wfw:comment>http://www.vbmigration.com/Blog/post/2008/06/Neat-tricks-for-smooth-migration-of-calls-to-Windows-API-methods.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.vbmigration.com/Blog/syndication.axd?post=2ec98577-4b5d-472e-85d5-cd1f25ca7182</wfw:commentRss>
    </item>
    <item>
      <title>VB6 Bulk Analyzer, a command-line tool to explore multiple VB projects</title>
      <description>&lt;p&gt;
We routinely&amp;nbsp;spend a lot of time at our customers&amp;#39; site, to help them in their migration needs. If you haven&amp;#39;t written an application&amp;#39;s source code, understanding what the migration challenges are is a difficult and time-consuming process. It gets quickly much worse if the application is scattered over dozens or hundreds VB6 projects, as is often the case with N-tier (DNA) Visual Basic applications. In such cases, even getting a broad idea of how large the application is, how many forms it has, which controls it uses, and which technologies it relies on is a nightmare. On top of that, if the application is really huge, few people in the company (if any) have a 360&amp;deg; view of the entire application. 
&lt;/p&gt;
&lt;p&gt;
For this and other reasons, this week I decided to lock my office door and build the &lt;strong&gt;VB6 Bulk Analyzer &lt;/strong&gt;tool. It&amp;#39;s a simple command-line utility that gathers a lot of information about all the VB6 projects and source files inside a specified directory tree and then creates a concise but quite thorough report. You can download the beta build &lt;a href="http://www.vbmigration.com/Blog/downloads/VB6Analyzer.zip"&gt;here&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
Using this tool is quite easy: just open a command window, move to the root of the directory tree that contains all the VB6 source files that you want to parse, and run the utility. I will show the name of the files being processed, and then a summary of all the code it has parsed. If you parse more than a few dozens files, odds are that the relevant information will scroll away from the window, but you also have a permanent copy in the file named VBAnalyser_Report.txt, in the current directory. The tool supports a few options too, such as &lt;strong&gt;/quiet &lt;/strong&gt;for omitting file names, &lt;strong&gt;/out &lt;/strong&gt;to select a different report file, and &lt;strong&gt;/help &lt;/strong&gt;to display a short explanation. You can also specify multiple folder names, in case your source code is scattered in directories that don&amp;#39;t have a common root, as in this example:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; VB6ANALYZER c:\firstapp c:\secondapp&amp;nbsp; /out:c:\report.txt 
&lt;/p&gt;
&lt;p&gt;
The report file contains much useful info, including: 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;number of projects and source files, grouped by type&lt;/li&gt;
	&lt;li&gt;statistics about the source code (code lines, empty and remark lines, etc.), number of methods, properties, etc.&lt;/li&gt;
	&lt;li&gt;statistics about ActiveX classes (grouped by their Instancing property, number of MTS classes, etc.)&lt;br /&gt;
	&lt;/li&gt;
	&lt;li&gt;all the type libraries used in all projects, with how many times the typelib is referenced&lt;/li&gt;
	&lt;li&gt;names of all used controls and components, with a count beside each control&lt;/li&gt;
	&lt;li&gt;list of all the Declare definition, with number of occurrences of each declare&lt;/li&gt;
	&lt;li&gt;list of problematic keywords (GoSub, On...Goto/Gosub, VarPtr, ObjPtr, StrPtr, etc.), with number of times the keyword is used &lt;/li&gt;
	&lt;li&gt;list of problematic data types (Variant, fixed-length strings, etc., with number of times the keyword is used&lt;/li&gt;
	&lt;li&gt;list of problematic control properties, methods, events (e.g. members related to classic Drag-and-drop or DDE)&lt;/li&gt;
	&lt;li&gt;list of problematic constants (e.g. adOpenDynamic and adOpenKeyset means that a piece of ADO code can&amp;#39;t be easily ported to ADO.NET)&lt;/li&gt;
	&lt;li&gt;list of COM classes that are instantiated via CreateObjects&lt;/li&gt;
	&lt;li&gt;list of OLEDB data providers explicitly mentioned in a connection string&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
VB6Analyzer is quite precise, especially if you consider that it doesn&amp;#39;t really interpret the VB6 source code. It uses plain regular expressons, yet it doesn&amp;#39;t suffer from &amp;quot;false matches&amp;quot; (eg. a keyword that appears in a remark or in a quoted string). Regular expressions make it very fast: on a 3GHz system it analyzes over 600K characters per second, or nearly 9,000 lines per second.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Please keep in mind that this build is just a beta version which I rolled out in a couple days. Please write me if you find any problem or inconsistent result. 
&lt;/p&gt;
&lt;p&gt;
PS: if you are interested in our VB Migration Partner or our migration services, just run VB6 Bulk Analyzer on your project and then send its report from the &lt;a href="http://www.vbmigration.com/Blog/contactus.aspx" target="_blank"&gt;Contact Us&lt;/a&gt; page. 
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=05oc5I"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=05oc5I" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=wOFP2I"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=wOFP2I" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.vbmigration.com/Blog/post/2008/06/VB6-Bulk-Analyzer,-a-command-line-tool-to-explore-multiple-VB-projects.aspx</link>
      <author>Francesco Balena</author>
      <comments>http://www.vbmigration.com/Blog/post/2008/06/VB6-Bulk-Analyzer,-a-command-line-tool-to-explore-multiple-VB-projects.aspx#comment</comments>
      <guid>http://www.vbmigration.com/Blog/post.aspx?id=6270661c-9950-4dc5-8732-941e99d7f6e1</guid>
      <pubDate>Wed, 11 Jun 2008 04:26:00 -0700</pubDate>
      <category>Migration cases</category>
      <category>VB6</category>
      <category>Tools</category>
      <dc:publisher>Francesco Balena</dc:publisher>
      <pingback:server>http://www.vbmigration.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.vbmigration.com/Blog/post.aspx?id=6270661c-9950-4dc5-8732-941e99d7f6e1</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.vbmigration.com/Blog/trackback.axd?id=6270661c-9950-4dc5-8732-941e99d7f6e1</trackback:ping>
      <wfw:comment>http://www.vbmigration.com/Blog/post/2008/06/VB6-Bulk-Analyzer,-a-command-line-tool-to-explore-multiple-VB-projects.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.vbmigration.com/Blog/syndication.axd?post=6270661c-9950-4dc5-8732-941e99d7f6e1</wfw:commentRss>
    </item>
    <item>
      <title>Feedback from the beta test trenches</title>
      <description>&lt;p&gt;
We received (and happily publish) another great feedback from one of our beta testers. The original text is in Italian, but I translated it for you here: 
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#0000ff"&gt;&lt;em&gt;Thanks, CodeArchitects! And a special thank to Francesco Balena for the job he did in developing this great VB6/.NET migration tool. &lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;font color="#0000ff"&gt;&lt;em&gt;&lt;span style="font-size: 10pt; color: #0f0f0f; font-family: 'Arial','sans-serif'"&gt;&lt;font color="#0000ff"&gt;Few people in this industy believed that such a product could be implemented and could have been so effective, including Microsoft who never really invested in a migration tool. Our company invested a lot of time and money on VB6 products, and we left abandoned to our destiny when VB.NET was released, together with many VB6 developers. Code Architects managed to create such a tool, thanks to their determination, perseverance, and deep knowledge of both migration techniques and VB6/VB.NET inner workings. From now on, VB6 applications &lt;strong&gt;*can*&lt;/strong&gt; be migrated, at last!&lt;/font&gt;&lt;/span&gt; &lt;/em&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;
&lt;p style="margin: 0cm 0cm 0pt" class="MsoNormal"&gt;
&lt;span style="font-size: 10pt; color: #0f0f0f; font-family: 'Arial','sans-serif'"&gt;&lt;font color="#0000ff"&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;em&gt;&lt;span style="font-size: 10pt; color: #0f0f0f; font-family: 'Arial','sans-serif'"&gt;&lt;font color="#0000ff"&gt;We have adopted VB Migration Partner&amp;nbsp;since the beginning of the beta test program, and we stressed it on large complex projects (over 110,000 lines of code) that&amp;nbsp;contain both custom and 3rd-party components, ADO, intensive Windows API usage, advanced graphics, sockets, even a script compiler. We always got great results and were able to migrate our projects by just adding a few migration directives (pragmas) to teach VB Migration Partner how to behave in a few special cases.&lt;/font&gt;&lt;/span&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;/em&gt;&lt;font color="#0000ff"&gt;&lt;em&gt;Giampaolo Lionello &lt;br /&gt;
&lt;/em&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;em&gt;Software Development Manager &lt;br /&gt;
&lt;font color="#0000ff"&gt;Prometeo S.p.A.:&amp;nbsp;&lt;span style="font-size: 10pt; color: #0f0f0f; font-family: 'Arial','sans-serif'"&gt;&lt;a href="http://www.prometeo.com"&gt;www.prometeo.com&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;&lt;/em&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;
&lt;p style="margin: 0cm 0cm 0pt" class="MsoNormal"&gt;
&lt;span style="font-size: 10pt; color: #0f0f0f; font-family: 'Arial','sans-serif'"&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt" class="MsoNormal"&gt;
&lt;span style="font-size: 10pt; color: #0f0f0f; font-family: 'Arial','sans-serif'"&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt" class="MsoNormal"&gt;
&lt;span style="font-size: 10pt; color: #0f0f0f; font-family: 'Arial','sans-serif'"&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt" class="MsoNormal"&gt;
&lt;span style="font-size: 10pt; color: #0f0f0f; font-family: 'Arial','sans-serif'"&gt;What can I add to Giampaolo&amp;#39;s words? I have seen their app in action and was impressed by their care for details. The most innovative detail is the presence of a custom script compiler, which allows partner vendors (and even power users) to customize every little detail of the application to fit their requirements. VB Migration Partner has been able to migrate the script compiler easily and quickly, which was quite remarkable.&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt" class="MsoNormal"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt" class="MsoNormal"&gt;
&lt;span style="font-size: 10pt; color: #0f0f0f; font-family: 'Arial','sans-serif'"&gt;Giampaolo and his team at Prometeo also provided many good pieces of advice. For example, they managed to migrate the entire data layer (about 25,000 lines) into a working VB.NET library in just a few hours. They then replaced the old VB6 data layer with the new VB.NET component and everything worked fine. There was a double jump from COM and .NET - VB6 calling VB.NET which was using ADO - yet the new data layer was only marginally slower (about 6%) than the original VB6 code. To their surprise they realized that this overhead was caused mainly by the many string concatenations inside the data layer compoment. &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt" class="MsoNormal"&gt;
&lt;span style="font-size: 10pt; color: #0f0f0f; font-family: 'Arial','sans-serif'"&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt" class="MsoNormal"&gt;
&lt;span style="font-size: 10pt; color: #0f0f0f; font-family: 'Arial','sans-serif'"&gt;The obvious solution was to use a StringBuilder, but we went one step further: we added the &lt;a href="http://www.vbmigration.com/Blog/Blog/post/2007/12/Speed-up-string-concatenations-after-the-migration-from-VB6.aspx" target="_blank"&gt;StringBuilder6&lt;/a&gt; class to our support library. This is a custom data type that looks exactly like a string (it supports the&amp;nbsp;&amp;amp; operator) but it internally uses a StringBuilder.&amp;nbsp;They were able to optimize all concatenations by just adding a few SetType pragmas. On top of that, we improved our code analysis engine to automatically flag all string concatenations inside loops and suggest which string variables could be turned into StringBuilder6 objects for highest efficiency.&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt" class="MsoNormal"&gt;
&lt;span style="font-size: 10pt; color: #0f0f0f; font-family: 'Arial','sans-serif'"&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0f0f0f; font-family: 'Arial','sans-serif'"&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=l3n5ZI"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=l3n5ZI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=14AX2I"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=14AX2I" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.vbmigration.com/Blog/post/2008/06/Feedback-from-the-beta-test-trenches.aspx</link>
      <author>Admin</author>
      <comments>http://www.vbmigration.com/Blog/post/2008/06/Feedback-from-the-beta-test-trenches.aspx#comment</comments>
      <guid>http://www.vbmigration.com/Blog/post.aspx?id=ad8f6b52-ed84-4119-bced-2f87cdb5bc56</guid>
      <pubDate>Mon, 02 Jun 2008 18:05:00 -0700</pubDate>
      <category>Migration cases</category>
      <category>VB Migration Partner</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://www.vbmigration.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.vbmigration.com/Blog/post.aspx?id=ad8f6b52-ed84-4119-bced-2f87cdb5bc56</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.vbmigration.com/Blog/trackback.axd?id=ad8f6b52-ed84-4119-bced-2f87cdb5bc56</trackback:ping>
      <wfw:comment>http://www.vbmigration.com/Blog/post/2008/06/Feedback-from-the-beta-test-trenches.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.vbmigration.com/Blog/syndication.axd?post=ad8f6b52-ed84-4119-bced-2f87cdb5bc56</wfw:commentRss>
    </item>
    <item>
      <title>What are your options to survive in the next decade?</title>
      <description>&lt;p&gt;
Well, I really mean &amp;quot;what are the options to have &lt;em&gt;your VB6 application &lt;/em&gt;survive in the next decade?&amp;quot;. After nearly 30 years in the field - I started my Computer Science studies in 1979, go figure! -&amp;nbsp;many of which spent consulting for companies in Europe and United States, I have seen many tecnology revolutions, including the advent of IBM PC and of Windows 1.0. Each one thaught me a little piece of experience. 
&lt;/p&gt;
&lt;p&gt;
Let&amp;#39;s quickly see the alternatives.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;1) DO NOTHING (AKA &amp;quot;IF IT AIN&amp;#39;T BROKE, DON&amp;#39;T FIX IT&amp;quot;)&lt;br /&gt;
&lt;/strong&gt;If the application is at the end of its life cycle, for example because it doesn&amp;#39;t fullfil a widespread need any longer, you might decide to have it die of a natural death. There is no reason to invest in a dying creature, therefore you might stay with VB6 and just fix some major bugs when your users complain aloud. Don&amp;#39;t add any new feature or extend it in any way, because it would be too expensive too. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;2) EXTEND THE VB6 APPLICATION USING COM INTEROP AND THE FORMS INTEROP TOOLKIT&lt;br /&gt;
&lt;/strong&gt;In this case you leave the main application in&amp;nbsp;VB6&amp;nbsp;but extend it by invoking .NET components using COM Interop, or display .NET forms using&amp;nbsp;Microsoft&amp;#39;s &lt;a href="http://msdn.microsoft.com/en-us/vbasic/bb419144.aspx" target="_blank"&gt;Forms Interop Toolkit&lt;/a&gt;.&amp;nbsp;Version 2.0 of this add-on is a major improvement, as it even supports hosting of .NET controls inside VB6 forms. Best of all, the toolkit is fully supported by Microsoft and comes with full source code. &lt;em&gt;&lt;font color="#0000ff"&gt;[Thanks to Rob Windsor for remainding me of this option, see comments]&lt;/font&gt;&lt;/em&gt; 
&lt;/p&gt;
&lt;p&gt;
While the toolkit is free, adopting it has some obvious and hidden defects and costs, though. First and foremost, this approach isn&amp;#39;t really a solution to the problem, is more of a technique to soften the migration path and lessen its impact on your organization. If you need to migrate because your app doesn&amp;#39;t work well under Windows Vista, or because it&amp;#39;s slow, or because you don&amp;#39;t want to rely on a language that Microsoft doesn&amp;#39;t support any longer, using COM Interop and the Forms Interop Toolkit is just a way to postpone the time when you truly need to find a reliable solution. Second, the communication between the VB6 and VB.NET portions of the application is often awkward and leads you to inefficiencies (due to COM Interop) and complex roundtrips that don&amp;#39;t make your code easily maintanable. 
&lt;/p&gt;
&lt;p&gt;
The bottom line: you should use the Forms Interop Toolkit only in the bigger picture of a phased migration (as Rob suggests in this comment). That is, while a group of developers is working on the porting from VB6, another group is already extending the application using VB.NET. Before taking this approach, you should compare it with the effort required by migrating it to VB.NET in one step using a *good* migration tool (ours, that is :-) ) 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;3) CONVERT TO VB.NET, USING THE UPGRADE WIZARD AVAILABLE IN VISUAL STUDIO&lt;br /&gt;
&lt;/strong&gt;Why not giving it a try? it&amp;#39;s free! While your hard disk spins for hours trying to convert your real-world business app, you can have enough time to google for less-then-gentle comments about this tool from the VB community. Let&amp;#39;s skip to next option. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;4) CONVERT TO VB.NET, USING VB MIGRATION PARTNER&lt;/strong&gt;&lt;br /&gt;
Using our conversion tool to migrate to VB.NET makes sense in many cases. First, when the original application works well and is &lt;span style="font-size: 8.5pt; font-family: 'Verdana','sans-serif'"&gt;thoroughly &lt;/span&gt;tested, but needs to be extended with new features and implementing these extensions with VB6 would be too difficult or expensive. Second,&amp;nbsp;when the application is so large that rewriting it from scratch would require a very intensive test phase. Third, if time-to-market is essential to beat your competition and make your existing users happy. In these cases you can leverage VB Migration Partner higher speed and precision (as noted by our &lt;a href="http://www.vbmigration.com/Blog/Blog/post/2008/05/Amazing-feedback-from-a-beta-tester.aspx" target="_blank"&gt;beta testers&lt;/a&gt;) 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;5) CONVERT TO VB.NET, USING ANOTHER 3&lt;sup&gt;RD&lt;/sup&gt;-PARTY TOOL&lt;/strong&gt;&lt;br /&gt;
There are other VB6-to-VB.NET migration tools on the market. Choosing a conversion tool is a critical decision, so you might want to ask our competitors for a trial version and compare it with our VB Migration Partner. &lt;em&gt;&lt;strong&gt;Please do it!&lt;/strong&gt;&lt;/em&gt; Please compare its feature, precision, and speed with VB Migration Partner and then let us know. If you don&amp;#39;t have time to waste, however, ask yourself the following questions before considering another conversion tool: 
&lt;/p&gt;
&lt;p&gt;
a) how many VB Migration Partner&amp;#39;s feature does this tool support? for example, does it fully support all 60+ VB6 controls, drag-and-drop, graphic methods, arrays with any LBound,&amp;nbsp;Gosubs, As New semantics, IDisposable objects, As Any parameters and callbacks in Declares, etc.&amp;nbsp;&lt;br /&gt;
b) are there any significant features that this tool support and that VB Migration Partner doesn&amp;#39;t?&lt;br /&gt;
c) why they don&amp;#39;t make their entire documentation available online &lt;em&gt;&lt;strong&gt;before&lt;/strong&gt;&lt;/em&gt; you buy?&lt;br /&gt;
d) why don&amp;#39;t they dare to publish &lt;strong&gt;real-world&lt;/strong&gt; VB6 apps and the VB.NET code that their tool generates? 
&lt;/p&gt;
&lt;p&gt;
As far as we know, Code Architects is the only vendor who has uploaded dozens of VB6 code samples and the corresponding, converted VB.NET project, to let potential customers &lt;em&gt;&lt;strong&gt;see &lt;/strong&gt;&lt;/em&gt;and &lt;em&gt;&lt;strong&gt;test &lt;/strong&gt;&lt;/em&gt;the VB.NET applications we produce. We don&amp;#39;t upload artificially-conceived tiny VB6 projects that highlights the tool&amp;#39;s strengths and hide its weakness. Instead, our &lt;a href="http://www.vbmigration.com/Blog/Documentation/codesamples.aspx" target="_blank"&gt;code sample section&lt;/a&gt; gathers open-source VB6 projects taken from the Internet, and we guarantee that we edited neither the original VB6 code (which is in fact downloadable from its original URL) nor the converted VB.NET. 
&lt;/p&gt;
&lt;p&gt;
Now ask yourself: why no other vendor took this obvious step to show the world how powerful their tool is? 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;6) MANUALLY RE-WRITE IT TO VB.NET&lt;/strong&gt;&lt;br /&gt;
In some cases, manually re-writing the application to VB.NET is a viable solution. Well, let me be absolutely honest on this point: &lt;em&gt;in (very) few cases, this is the solution&amp;nbsp;we recommend to our customers&lt;/em&gt;. If the application is a huge amount of contorted spaghetti code, has a orrible architecture and a ugly user interface....well, in this case you don&amp;#39;t want to spend more time and money on automatic porting, because you would also port these issues to VB.NET.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
When weighing a complete re-writing from scratch against automatic porting, you should take several factors into account, including: 
&lt;/p&gt;
&lt;p&gt;
a) rewriting often takes from 50% to 90% of the time and money that was necessary to write the original application.&amp;nbsp;(Sorry, no official statistics on this, just our field experience...)&lt;br /&gt;
b) you need a team of developer who are experienced in &lt;em&gt;&lt;strong&gt;both &lt;/strong&gt;&lt;/em&gt;VB6 and VB.NET, and they also need to be familiar with issues related to the specific application, therefore you can&amp;#39;t simply hire them from outside your company&lt;br /&gt;
c) how do you cope with continuous edits/improvements to the original VB6 code during the months required by&amp;nbsp;the rewrite? In other words, can you count on something similar to our &lt;a href="http://www.vbmigration.com/Blog/Documentation/chapter1.aspx#1-4" target="_blank"&gt;convert-test-fix&lt;/a&gt; methodology?&lt;br /&gt;
d) can &lt;em&gt;really &lt;/em&gt;you afford the extra time required by a complete re-write? what will your competitor do in the meantime? 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;7) MANUALLY RE-WRITE TO C#, JAVA, OR ANOTHER LANGUAGE&lt;br /&gt;
&lt;/strong&gt;I heard that a few ISVs are taking this path. In my opinion this is an irrational decision, often motivated by the anti-VB (or even anti-Microsoft) feeling that is so fashionable today. Let me explain why you shouldn&amp;#39;t even think of jumping from VB6 to any .NET language other than VB.NET. 
&lt;/p&gt;
&lt;p&gt;
Rewriting a complex VB6 application into a different language has all the drawbacks of rewriting it to VB.NET (see point 6), plus the many problems that you have when switching from VB.NET to C# or Java. How do you implement On Error Resume Next in C#? How do you render a DTPicker control in Java without carefuly mapping each and every property, method, and event? But the decisive argument is: do you have enough developers who are equally familiar with VB6 &lt;strong&gt;&lt;em&gt;and &lt;/em&gt;&lt;/strong&gt;C# or Java &lt;strong&gt;&lt;em&gt;and &lt;/em&gt;&lt;/strong&gt;the application being migrated? 
&lt;/p&gt;
&lt;p&gt;
Briefly stated: taking this route is a technological suicide similar to point 1), except it takes longer, costs more,&amp;nbsp;and is more agonizing. You can only hope that your competitors are in love enough with C# or Java to invest their energies in this option. If you hear that they are doing it, relax and be happy: you don&amp;#39;t have anything to worry about for a long time :-) 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;8) CONVERT IT TO C# USING AN AUTOMATIC CONVERSION TOOL&lt;br /&gt;
&lt;/strong&gt;Come on! To get an idea of how tough this &amp;quot;solution&amp;quot; (so to speak) is, take all the issues listed at point 5) and multiply them by all the problems mentioned at point 7). Then double the result to have a more reasonable estimate of the actual cost and effort. 
&lt;/p&gt;
&lt;p&gt;
More seriously, just think of this: there are a few commercial tools on the market that can automatically migrate VB.NET to C#, for example &lt;a href="http://www.tangiblesoftwaresolutions.com/" target="_blank"&gt;Instant C#&lt;/a&gt; or &lt;a href="http://www.elegancetech.com/CSVB/CSVB.aspx?src=12" target="_blank"&gt;C-Sharpener for VB&lt;/a&gt;. I have actually used a couple of these tools, they do a great job. However, they still require a few manual edits after the conversion, to adjust minor differences between VB.NET and C#. The main reason is that &lt;em&gt;the resulting C# code doesn&amp;#39;t look like native C# &lt;/em&gt;and requires some fixes to be more readable and easily maintainable. 
&lt;/p&gt;
&lt;p&gt;
Before your consider this approach, ask yourself two questions: 
&lt;/p&gt;
&lt;p&gt;
a) if you believe that automatic conversion between two .NET languages (VB.NET and C#) is difficult, how can you expect that a tool be able to automatically convert from VB6 to C# in one single step?&lt;br /&gt;
b) on the other hand, if you think that conversion from VB.NET to C# &lt;strong&gt;&lt;em&gt;can &lt;/em&gt;&lt;/strong&gt;be fully automated, why not going from VB6 to VB.NET using our VB Migration Partner (or another tool, if you prefer) first and then using Instant-C, C-Sharpener for VB, or another similar tool for doing the final move to C#? 
&lt;/p&gt;
&lt;p&gt;
If you really want a C# app as the final deliverable of your conversion efforts, keep in mind that jumping from VB6 directly to C# doesn&amp;#39;t give you more than switching from VB6 to VB.NET first and then from VB.NET to C#. Well, it actually does give you something more.... many more headaches, for precision&amp;#39;s sake&amp;nbsp;:-) 
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=lN5AjH"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=lN5AjH" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=CI081H"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=CI081H" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.vbmigration.com/Blog/post/2008/05/What-are-your-options-to-survive-in-the-next-decade.aspx</link>
      <author>Admin</author>
      <comments>http://www.vbmigration.com/Blog/post/2008/05/What-are-your-options-to-survive-in-the-next-decade.aspx#comment</comments>
      <guid>http://www.vbmigration.com/Blog/post.aspx?id=aeecdcb2-ca29-427d-a0fb-ca964012cdb7</guid>
      <pubDate>Thu, 29 May 2008 01:51:00 -0700</pubDate>
      <category>Migration cases</category>
      <category>VB.NET</category>
      <category>VB Migration Partner</category>
      <category>VB6</category>
      <category>Tools</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://www.vbmigration.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.vbmigration.com/Blog/post.aspx?id=aeecdcb2-ca29-427d-a0fb-ca964012cdb7</pingback:target>
      <slash:comments>8</slash:comments>
      <trackback:ping>http://www.vbmigration.com/Blog/trackback.axd?id=aeecdcb2-ca29-427d-a0fb-ca964012cdb7</trackback:ping>
      <wfw:comment>http://www.vbmigration.com/Blog/post/2008/05/What-are-your-options-to-survive-in-the-next-decade.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.vbmigration.com/Blog/syndication.axd?post=aeecdcb2-ca29-427d-a0fb-ca964012cdb7</wfw:commentRss>
    </item>
    <item>
      <title>A great .NET Logging tool</title>
      <description>&lt;p&gt;
&lt;br /&gt;
Dennis Gurock is the main developer of &lt;a href="http://www.gurock.com/products/smartinspect/t/1/" target="_blank"&gt;SmartInspect&lt;/a&gt;, a .NET, java, and Delphi logging tool. I heard about this software some time ago and was impressed by its features, especially the ability to filter messages and find subtle bugs. Had I discovered it before, I would have surely used it during the test phase of VB Migration Partner, and I would have save a lot of time and many headaches. Maybe in the next coding project... 
&lt;/p&gt;
&lt;p&gt;
I was pleased to see that Dennis heard about our tool too, and &lt;a href="http://blog.gurock.com/postings/migrating-vb6-applications/311/" target="_blank"&gt;blogged about it&lt;/a&gt;. I already already left a comment to thank him, but I was especially intrigued by the question at the end of his post: &lt;em&gt;are there better alternatives than migrating VB6 to VB.NET than an automatic migration tool, such as migrating to Delphi? &lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
First, my hat off to Delphi. It has been the very first &amp;quot;pure&amp;quot; object-oriented programming language that became mainstream, when C++ was just used like a &amp;quot;better C&amp;quot;. Many of the best features in .NET have their roots in Delphi, therefore I highly respect this language and those who write great apps with it. It&amp;#39;s a pity that Borland made a few faux pas and isn&amp;#39;t the great company it used to be 20 years ago. 
&lt;/p&gt;
&lt;p&gt;
That said, I don&amp;#39;t see why VB6-ers should move to Delphi instead of VB.NET. For a more articulated answer, read my next post. 
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=XOxEQH"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=XOxEQH" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=XHTS3H"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=XHTS3H" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.vbmigration.com/Blog/post/2008/05/A-great-NET-Logging-tool.aspx</link>
      <author>Admin</author>
      <comments>http://www.vbmigration.com/Blog/post/2008/05/A-great-NET-Logging-tool.aspx#comment</comments>
      <guid>http://www.vbmigration.com/Blog/post.aspx?id=bfe5f507-7179-4786-b12d-714d2ab275ec</guid>
      <pubDate>Wed, 28 May 2008 21:01:00 -0700</pubDate>
      <category>Tools</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://www.vbmigration.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.vbmigration.com/Blog/post.aspx?id=bfe5f507-7179-4786-b12d-714d2ab275ec</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.vbmigration.com/Blog/trackback.axd?id=bfe5f507-7179-4786-b12d-714d2ab275ec</trackback:ping>
      <wfw:comment>http://www.vbmigration.com/Blog/post/2008/05/A-great-NET-Logging-tool.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.vbmigration.com/Blog/syndication.axd?post=bfe5f507-7179-4786-b12d-714d2ab275ec</wfw:commentRss>
    </item>
    <item>
      <title>Amazing feedback from a beta tester</title>
      <description>&lt;p&gt;
Yesterday we received this comment from one of our early beta testers. I &lt;span style="font-weight: bold; color: red; font-style: italic"&gt;must&lt;/span&gt; share it with you: 
&lt;/p&gt;
&lt;div style="margin-left: 15px; color: #0066cc; margin-right: 15px; font-style: italic; text-align: justify"&gt;
&lt;p&gt;
After 15 years of developing our application in VB3, VB4-16 bit and VB6, I was disappointed to discover that we could not move to VB.Net. Our application was too large to rewrite into the new syntax. In spite of edits made to follow the new rules, such as omitting the lower bound on Dim statements, the migration tool available ran for 5 hours and gave 1947 errors to fix; and that was just on our main application program. Using VB Migration Partner, we converted that same code to .Net in 9 minutes and had 3 compilation errors to fix, all having to do with a third-party OCX. After commenting out those lines, the application started up and ran just fine, displaying dialogs that invoke our VB6 COM servers to perform calculations and print reports. Amazing! We need to keep developing our code in VB6 for our current clients, but the batch processing and code-test-fix methodology will allow us to convert a changing code base without making the same changes twice, once in VB6 and again in VB.Net. 
&lt;/p&gt;
&lt;p&gt;
ASC has been providing this application to businesses for over 25 years and we have successfully migrated from the mini-computer platform in the past. A rewrite would be impossible with an application such as ours that has evolved over so many years. Our client base has grown steadily during that time, and now includes 100&amp;rsquo;s of small to midsized firms with networks of 5 to 30 concurrent users of our application, and 20 of the top financial institutions in the nation, two of which have over 100 concurrent users of our application. With this tool, we will be able to support our existing platform and roll out a VB.Net version with minimal disruption to our clients. 
&lt;/p&gt;
&lt;p&gt;
Brian Olson&lt;br /&gt;
Actuarial Systems Corporation, USA 
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
We &lt;strong&gt;&lt;em&gt;knew&lt;/em&gt;&lt;/strong&gt; our tool was more accurate than other tools on the market, but Brian&amp;rsquo;s experience is simply amazing: With just a few pragmas, they had a running .NET application in less than one hour! 
&lt;/p&gt;
&lt;p&gt;
Brian told me they are now working on details, such as inter-program communication &amp;ndash; their VB6 app used DDE, which isn&amp;rsquo;t currently supported by VB Migration Partner &amp;ndash; but most of the migration has been completed&amp;hellip; in one fifth of the time it took the &amp;ldquo;other&amp;rdquo; migration tool just to parse the VB6 project &lt;img src="/Blog/admin/pages/../tiny_mce/plugins/emotions/images/smiley-smile.gif" border="0" alt="Smile" title="Smile" width="18" height="18" /&gt; 
&lt;/p&gt;
&lt;p&gt;
Now, that means &lt;em&gt;fast&lt;/em&gt;! 
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=tigLTH"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=tigLTH" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=SyFVpH"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=SyFVpH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.vbmigration.com/Blog/post/2008/05/Amazing-feedback-from-a-beta-tester.aspx</link>
      <author>Francesco Balena</author>
      <comments>http://www.vbmigration.com/Blog/post/2008/05/Amazing-feedback-from-a-beta-tester.aspx#comment</comments>
      <guid>http://www.vbmigration.com/Blog/post.aspx?id=37feb68b-c3e1-4454-92d6-a3632a2f545a</guid>
      <pubDate>Sat, 24 May 2008 20:42:00 -0700</pubDate>
      <category>VB Migration Partner</category>
      <dc:publisher>Francesco Balena</dc:publisher>
      <pingback:server>http://www.vbmigration.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.vbmigration.com/Blog/post.aspx?id=37feb68b-c3e1-4454-92d6-a3632a2f545a</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.vbmigration.com/Blog/trackback.axd?id=37feb68b-c3e1-4454-92d6-a3632a2f545a</trackback:ping>
      <wfw:comment>http://www.vbmigration.com/Blog/post/2008/05/Amazing-feedback-from-a-beta-tester.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.vbmigration.com/Blog/syndication.axd?post=37feb68b-c3e1-4454-92d6-a3632a2f545a</wfw:commentRss>
    </item>
    <item>
      <title>Comment from a Microsoft MVP</title>
      <description>&lt;p&gt;
Now that VB Migration Partner is out, we can disclose a few comments from our beta testers. Here&amp;rsquo;s the one coming from &lt;a href="http://www.lorenzobarbieri.info/"&gt;Lorenzo Barbieri&lt;/a&gt; (LinkedIN &lt;a href="http://www.linkedin.com/in/geniodelmale"&gt;profile&lt;/a&gt;). Lorenzo is arguably the most active Italian blogger, writes on several magazines (including Italian edition of MSDN), speaks at international conferences, and is a very active MVP. Yesterday he blogged on VB Migration Partner; his &lt;a href="http://blogs.ugidotnet.org/lbarbieri/archive/2008/05/22/92773.aspx"&gt;post&lt;/a&gt; is in Italian, but&amp;nbsp; I have translated it for you here: 
&lt;/p&gt;
&lt;div style="margin-left: 15px; color: #0066cc; margin-right: 15px; font-style: italic; text-align: justify"&gt;
&lt;strong&gt;VB Migration Partner 1.0 has been released&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Today version 1.0 of the tool Francesco Balena has been working on together with Code Architects Team has been released.&lt;br /&gt;
&lt;br /&gt;
In past months I have tried a few beta releases, however &amp;ndash; because of the recent job change &lt;span style="font-style: normal"&gt;[In April Lorenzo joined Microsoft as a Developer Evangelist, F.B.] &lt;/span&gt;&amp;ndash; I didn&amp;rsquo;t manage to test it thoroughly enough to provide useful feedback. Nevertheless, all the tests I run it through were successful and all the projects I submitted to it were converted at the first attempt. &lt;br /&gt;
&lt;br /&gt;
If you still have VB6 projects and want to convert them to VB.NET, I warmly recommend to give this tool a try. 
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=nKehRH"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=nKehRH" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=jsMwFH"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=jsMwFH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.vbmigration.com/Blog/post/2008/05/Comment-from-a-Microsoft-MVP.aspx</link>
      <author>Francesco Balena</author>
      <comments>http://www.vbmigration.com/Blog/post/2008/05/Comment-from-a-Microsoft-MVP.aspx#comment</comments>
      <guid>http://www.vbmigration.com/Blog/post.aspx?id=d5615f96-dca1-4654-ac6f-dadbda4def9b</guid>
      <pubDate>Fri, 23 May 2008 03:26:00 -0700</pubDate>
      <category>VB Migration Partner</category>
      <dc:publisher>Francesco Balena</dc:publisher>
      <pingback:server>http://www.vbmigration.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.vbmigration.com/Blog/post.aspx?id=d5615f96-dca1-4654-ac6f-dadbda4def9b</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.vbmigration.com/Blog/trackback.axd?id=d5615f96-dca1-4654-ac6f-dadbda4def9b</trackback:ping>
      <wfw:comment>http://www.vbmigration.com/Blog/post/2008/05/Comment-from-a-Microsoft-MVP.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.vbmigration.com/Blog/syndication.axd?post=d5615f96-dca1-4654-ac6f-dadbda4def9b</wfw:commentRss>
    </item>
    <item>
      <title>Alive and kicking: VB Migration Partner 1.0 has been released!</title>
      <description>&lt;p&gt;
Seven months after the launch of the &lt;a href="http://www.vbmigration.com/Blog/"&gt;http://www.vbmigration.com/&lt;/a&gt; web site - and about two and a half years after we wrote a first prototype - we are excited to announce that VB Migration Partner 1.0 is finally available. 
&lt;/p&gt;
&lt;p&gt;
True, it took a bit longer than we expected. Our beta testers reported a few elusive bugs, that we promptly fixed, but above all they give us hints and suggestions on how to improve our tool. As a result, we added many new pragmas, support for batch migrations, optimized execution for n-tier applications, include files, advanced code analysis techniques, and much more. We now support Visual Studio 2008 and the integration with Microsoft Team System. We wanted to write the best conversion tool from VB6 and VB.NET, and we did it. 
&lt;/p&gt;
&lt;p&gt;
In these months VB Migration Partner has proven to be a very flexible tool, able to fit the most demanding migration needs. It is being used to migrate VB6 projects of all kinds and sizes, from graphical games to mission-critical bank and insurance software, from little utilities to &amp;quot;monsters&amp;quot; business apps that count over 10 million lines. One of our customers is using it convert an interpreter for a custom programming language. 
&lt;/p&gt;
&lt;p&gt;
Along the way we learned more ways to improve the quality of migrated code and expanded our &lt;a href="http://www.vbmigration.com/Blog/knowledgebase.aspx"&gt;knowledge base&lt;/a&gt; with dozens of articles, which explain how to achieve the most from this tool. The great thing about VB Migration Partner is its flexibility (provided by pragmas) and its open architecture, which allows you to be in control of how VB.NET code is generated, how to convert forms containing 3rd party controls, and more. 
&lt;/p&gt;
&lt;p&gt;
The &amp;quot;convert-test-fix&amp;quot; methodology has been welcome by all our customers, especially those who have large &amp;quot;legacy&amp;quot; applications to take care of, that can&amp;#39;t simply be thrown away when the VB.NET version is ready. As a matter of fact, one of our customers is planning to keep both the VB6 and VB.NET versions in sync for at least one year, until they complete the conversion and all their users have switched to the .NET version. To ensure that the two versions are &amp;quot;functionally equivalent&amp;quot; at all times, they will use batch migration and custom-made plug-ins that leverage VB Migration Partner&amp;#39;s extensibility model. Just another evidence of how flexible our tool is. 
&lt;/p&gt;
&lt;hr width="90%" /&gt;
&lt;br /&gt;
&lt;p&gt;
Many developers wrote us and asked about our licensing policy. Our goal was to make VB Migration Partner a viable solution for software companies of all sizes as well as individual developers and smaller software shops. As a result, we are offering VB Migration Partner in two editions: 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;VB Migration Partner Professional&lt;/strong&gt; supports the vast majority of the features described on our Web site and can convert VB6 projects of up to 50,000 executable lines. (Empty lines and remarks aren&amp;#39;t included in the count, but lines at the top of .frm files are.) &lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;VB Migration Partner Enterprise&lt;/strong&gt; is the full-featured version, can migrate larger VB6 projects, performs more sophisticated code analysis and refactoring, supports batch conversions and Microsoft Team System, and is the preferred choice for N-tiered applications. Users of the Enterprise Edition can purchase additional user licenses and the full source code of the support library. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Unfortunately, at this time we can&amp;#39;t offer a demo version that is freely downloadable, but we plan to remedy in the future. If you need to test our tool against your VB6 code, &lt;a href="http://www.vbmigration.com/Blog/contactus.aspx?rsn=Question+(technical)"&gt;let us know&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
All VB Migration Partner users benefit from a &lt;strong&gt;subscription&lt;/strong&gt; period, during which they are allowed to download all the releases that have produced in the meantime. The subscription period is 3 months for the Professional edition and 6 months for the Enterprise edition. 
&lt;/p&gt;
&lt;p&gt;
Finally, we are launching the &lt;strong&gt;Early Adopter Program&lt;/strong&gt; (EAP): for a short period you can purchase VB Migration Partner and double your subscription period: six months for the Professional edition and one year for the Enterprise edition. Start converting your VB6 applications right now and protect your investment at the same time! 
&lt;/p&gt;
&lt;p&gt;
Find more information on &lt;a href="http://www.vbmigration.com/Blog/"&gt;our web site&lt;/a&gt;. 
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=Z5SbtH"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=Z5SbtH" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=Wo7bwH"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=Wo7bwH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.vbmigration.com/Blog/post/2008/05/Alive-and-kicking-VB-Migration-Partner-10-has-been-released!.aspx</link>
      <author>Francesco Balena</author>
      <comments>http://www.vbmigration.com/Blog/post/2008/05/Alive-and-kicking-VB-Migration-Partner-10-has-been-released!.aspx#comment</comments>
      <guid>http://www.vbmigration.com/Blog/post.aspx?id=523c4c3a-7e23-499d-bebb-02dcc2ea6b91</guid>
      <pubDate>Thu, 22 May 2008 00:38:00 -0700</pubDate>
      <category>VB Migration Partner</category>
      <dc:publisher>Francesco Balena</dc:publisher>
      <pingback:server>http://www.vbmigration.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.vbmigration.com/Blog/post.aspx?id=523c4c3a-7e23-499d-bebb-02dcc2ea6b91</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.vbmigration.com/Blog/trackback.axd?id=523c4c3a-7e23-499d-bebb-02dcc2ea6b91</trackback:ping>
      <wfw:comment>http://www.vbmigration.com/Blog/post/2008/05/Alive-and-kicking-VB-Migration-Partner-10-has-been-released!.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.vbmigration.com/Blog/syndication.axd?post=523c4c3a-7e23-499d-bebb-02dcc2ea6b91</wfw:commentRss>
    </item>
    <item>
      <title>Release 0.98 has been just released</title>
      <description>&lt;p&gt;
Yesterday we worked hard to fix a subtle bug related to project groups, plus other minor stuff related to the Data and TabStrip controls. 
&lt;/p&gt;
&lt;p&gt;
Today is a nationa holiday here in Italy, but our beta testers abroad can download version 0.98 and play with it during the weekend. (We know for sure that some do! ) 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=rc8L4I"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=rc8L4I" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=wjzOrI"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=wjzOrI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.vbmigration.com/Blog/post/2008/04/Release-098-has-been-just-released.aspx</link>
      <author>Admin</author>
      <comments>http://www.vbmigration.com/Blog/post/2008/04/Release-098-has-been-just-released.aspx#comment</comments>
      <guid>http://www.vbmigration.com/Blog/post.aspx?id=a9350820-843e-4dda-8499-d37a3d0a60f9</guid>
      <pubDate>Fri, 25 Apr 2008 08:16:00 -0700</pubDate>
      <category>VB Migration Partner</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://www.vbmigration.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.vbmigration.com/Blog/post.aspx?id=a9350820-843e-4dda-8499-d37a3d0a60f9</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://www.vbmigration.com/Blog/trackback.axd?id=a9350820-843e-4dda-8499-d37a3d0a60f9</trackback:ping>
      <wfw:comment>http://www.vbmigration.com/Blog/post/2008/04/Release-098-has-been-just-released.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.vbmigration.com/Blog/syndication.axd?post=a9350820-843e-4dda-8499-d37a3d0a60f9</wfw:commentRss>
    </item>
    <item>
      <title>Version 0.97 is online!</title>
      <description>&lt;p&gt;
This is truly a milestone in our release story. We have added &lt;a href="http://www.vbmigration.com/Blog/Blog/post/2008/04/New-great-features-are-on-the-way.aspx"&gt;many new features&lt;/a&gt;, including support for Visual Studio 2008 and for batch migratons. A number of KB articles describe how to use these new features, for example
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.vbmigration.com/Blog/detknowledgebase.aspx?Id=337" target="_blank"&gt;[HOWTO] Generate Visual Studio 2008 project&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
We have added many new pragmas:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;PreInclude &lt;/strong&gt;and &lt;strong&gt;PostInclude &lt;/strong&gt;pragmas allow you to include a piece of VB6 code (before the parsing step) or a piece of VB.NET code (after the migration is completed); they even support recursive inclusion (an include file can contain other PreInclude and PostInclude pragmas). The PreInclude pragma can be used in a *.pragmas file and in practice allows you to have all these *.pragmas file reference the same settings stored in a centralized file.
&lt;/p&gt;
&lt;p&gt;
The &lt;strong&gt;OutputMode &lt;/strong&gt;pragma now supports an Uncomment mode, which allows you to includ a block of remarked out VB.NET code and have it un-remarked during the migration process. (It is a great way to include large pieces of VB.NET code in the middle of a VB6 source file.) You can find an usage example here:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.vbmigration.com/Blog/detknowledgebase.aspx?Id=5" target="_blank"&gt;[HOWTO] &lt;span class="KB_TipoItem"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.vbmigration.com/Blog/detknowledgebase.aspx?Id=5" target="_blank"&gt;Exclude portions of VB6 code from the migration process and replace it with custom VB.NET statements&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
We changed the way we deal with Empty and Null values. In previous releases, these values were migrated to VB6Empty and VB6Null constants, and both of them were set equal to Nothing. Using constants was necessary to support Null and Empty values when they appear as default values for optional parameters, as in this statement
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Sub Test(Optional x As Variant = Null)
&lt;/p&gt;
&lt;p&gt;
However, using constants didn&amp;#39;t make it possible to map the null value to DBNull.Value, and a few beta testers complained about this. Thus we decided to map these values to &lt;strong&gt;Empty6 &lt;/strong&gt;and &lt;strong&gt;Null6 &lt;/strong&gt;properties, which by default are equal to Nothing and DBNull.Value, respectively, but can be changed if necessary. You can find more details in this article:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.vbmigration.com/Blog/detknowledgebase.aspx?Id=339" target="_blank"&gt;[HOWTO] Deal with Null and Empty values&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Another minor improvement on previous releases: we have added the VB6Config class that gathers all the settings that you can change at runtime to fine tune the library&amp;#39;s behavior, as explained here:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.vbmigration.com/Blog/detknowledgebase.aspx?Id=6" target="_blank"&gt;[HOWTO] Determine whether unsupported member throw an exception at runtime&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.vbmigration.com/Blog/detknowledgebase.aspx?Id=7" target="_blank"&gt;[HOWTO] Ignore fatal error at runtime&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The new &lt;strong&gt;VB6Config.FocusEventSupport &lt;/strong&gt;lets you work around a key difference in how VB6 and VB.NET deal with LostFocus and Validate events:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.vbmigration.com/Blog/detknowledgebase.aspx?Id=331" target="_blank"&gt;[INFO] Controlling the LostFocus and Validate event sequence&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
We are including a new extender that allows you to create a text file containing the list of all the migration issues and warnings. It&amp;#39;s a precious feature when you migrate multiple projects in batch mode. You can read more details in this article:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.vbmigration.com/Blog/detknowledgebase.aspx?Id=338" target="_blank"&gt;[HOWTO] Create a report with all the migration issues and warnings&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
We also added a few KB articles that illustrate non-obvious way to use PostProcess pragmas, for example:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.vbmigration.com/Blog/detknowledgebase.aspx?Id=329" target="_blank"&gt;[HOWTO] Modify project-level options in VB.NET programs&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.vbmigration.com/Blog/detknowledgebase.aspx?Id=330" target="_blank"&gt;[HOWTO] Enforce project-level Option Strict Off settings in VB.NET programs&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Last but not the least, we have fixed 35 bugs. As usual, beta tester can find the complete list in the VERSION HISTORY.TXT file.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=usNQ2I"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=usNQ2I" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=VJCSjI"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=VJCSjI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.vbmigration.com/Blog/post/2008/04/Version-097-is-online!.aspx</link>
      <author>Admin</author>
      <comments>http://www.vbmigration.com/Blog/post/2008/04/Version-097-is-online!.aspx#comment</comments>
      <guid>http://www.vbmigration.com/Blog/post.aspx?id=f684bed0-ccc8-4cf9-acec-132151e19791</guid>
      <pubDate>Mon, 21 Apr 2008 05:09:00 -0700</pubDate>
      <category>VB Migration Partner</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://www.vbmigration.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.vbmigration.com/Blog/post.aspx?id=f684bed0-ccc8-4cf9-acec-132151e19791</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.vbmigration.com/Blog/trackback.axd?id=f684bed0-ccc8-4cf9-acec-132151e19791</trackback:ping>
      <wfw:comment>http://www.vbmigration.com/Blog/post/2008/04/Version-097-is-online!.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.vbmigration.com/Blog/syndication.axd?post=f684bed0-ccc8-4cf9-acec-132151e19791</wfw:commentRss>
    </item>
    <item>
      <title>New great features are on the way...</title>
      <description>&lt;p&gt;
While we are still busy on release 0.97, I want to let you know in advance what we working on.
&lt;/p&gt;
&lt;p&gt;
First and foremost, VB Migration Partner now supports both Visual Studio 2005 and &lt;strong&gt;Visual Studio 2008&lt;/strong&gt;. You have to change a line in the beta&amp;#39;s configuration file to enable VB2008 support, but it won&amp;#39;t be necessary with the &amp;quot;real&amp;quot; product, because we plan to deliver two distinct versions of release 1.0, each one generating different flavors of Visual Basic projects.
&lt;/p&gt;
&lt;p&gt;
Another great new feature is the &lt;strong&gt;support for batch migrations: &lt;/strong&gt;you can run VB Migration Partner via a command-line tool and integrate it in your build process. If your application consists of dozens of separate projects, this feature can save you a lot of time and efforts. Even if you don&amp;#39;t use a build process, you can automate the re-migration of the entire application by means of a plain batch file.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
We have added a tab to the Tools-Options dialog box, where you can select a &lt;strong&gt;default output folder &lt;/strong&gt;for converted projects. Not really an amazing feature, yet something that is quite handy when converting a multiple-project application.
&lt;/p&gt;
&lt;p&gt;
Another simple but useful feature: project GUIDs are preserved when re-migrating a project that had been migrated previously. If you wonder why this can be useful, just imagine the following scenario. You migrate projects P1 and P2 to VB.NET (separatedly), then you launch Visual Studio 2005/2008 and create a solution S1 that gathers the two project. (Creating a single solution can be useful for debugging purposes, for example.) If you find a bug in P1 you can now re-migrate it without breaking the S1 solution, because the link between a solution and its projects depends on the project&amp;#39;s GUID stored in the *.vbproj file. Ditto for references between projects in the same solution. It&amp;#39;s a tiny feature but a great time saver.
&lt;/p&gt;
&lt;p&gt;
Finally, we have changed the Excel template used to generate assessment estimation of time/cost of the migration process. You can now use your own formulas to define how the cost grows when the number of occurrences of a given issue grows. Thanks to this new feature you can create more reasonable migration plans.
&lt;/p&gt;
&lt;p&gt;
Version 0.97 is arriving in a few days. Beta testers, stay tuned! .... and thanks for your precious support in these months.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=JM254I"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=JM254I" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=oOIPMI"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=oOIPMI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.vbmigration.com/Blog/post/2008/04/New-great-features-are-on-the-way.aspx</link>
      <author>Admin</author>
      <comments>http://www.vbmigration.com/Blog/post/2008/04/New-great-features-are-on-the-way.aspx#comment</comments>
      <guid>http://www.vbmigration.com/Blog/post.aspx?id=24ab817b-2b77-47e6-99ae-44b314d08a1b</guid>
      <pubDate>Tue, 15 Apr 2008 19:49:00 -0700</pubDate>
      <category>VB Migration Partner</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://www.vbmigration.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.vbmigration.com/Blog/post.aspx?id=24ab817b-2b77-47e6-99ae-44b314d08a1b</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.vbmigration.com/Blog/trackback.axd?id=24ab817b-2b77-47e6-99ae-44b314d08a1b</trackback:ping>
      <wfw:comment>http://www.vbmigration.com/Blog/post/2008/04/New-great-features-are-on-the-way.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.vbmigration.com/Blog/syndication.axd?post=24ab817b-2b77-47e6-99ae-44b314d08a1b</wfw:commentRss>
    </item>
    <item>
      <title>Version 0.96 available to beta testers</title>
      <description>&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
We have just uploaded version 0.96. There are very few new features, namely
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;the &lt;strong&gt;SendToBack &lt;/strong&gt;pragma allows you to finely control the z-ordering of controls&lt;/li&gt;
	&lt;li&gt;he &lt;strong&gt;MoveControlOverButton &lt;/strong&gt;special method of the Toolbar control makes it easy to remedy to the fact that the .NET toolbar can&amp;#39;t work as a control container (unlike the VB6 toolbar)&lt;/li&gt;
	&lt;li&gt;VB Migration Partner now correctly migrates the Command Line string that you set in the Make tab of the Project Properties dialog box&lt;br /&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Of course we&amp;#39;ve also fixed several bugs, most of which related to the MaskEdBox control and the DAO/RDO data controls. More details are available in the Version History.txt file.
&lt;/p&gt;
&lt;p&gt;
We are quickly approaching version 1.0, which we plan to release in mid-April. The beta test program officially ended some weeks ago, we apologize that we had to reject all subsequent requests.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=HKXLsI"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=HKXLsI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=83BSLI"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=83BSLI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.vbmigration.com/Blog/post/2008/03/Version-096-available-to-beta-testers.aspx</link>
      <author>Admin</author>
      <comments>http://www.vbmigration.com/Blog/post/2008/03/Version-096-available-to-beta-testers.aspx#comment</comments>
      <guid>http://www.vbmigration.com/Blog/post.aspx?id=e947c668-1412-4e91-9eeb-22f02f6bcf16</guid>
      <pubDate>Sat, 22 Mar 2008 02:21:00 -0700</pubDate>
      <category>VB Migration Partner</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://www.vbmigration.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.vbmigration.com/Blog/post.aspx?id=e947c668-1412-4e91-9eeb-22f02f6bcf16</pingback:target>
      <slash:comments>9</slash:comments>
      <trackback:ping>http://www.vbmigration.com/Blog/trackback.axd?id=e947c668-1412-4e91-9eeb-22f02f6bcf16</trackback:ping>
      <wfw:comment>http://www.vbmigration.com/Blog/post/2008/03/Version-096-available-to-beta-testers.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.vbmigration.com/Blog/syndication.axd?post=e947c668-1412-4e91-9eeb-22f02f6bcf16</wfw:commentRss>
    </item>
    <item>
      <title>Play battleship with VB Migration Partner!</title>
      <description>&lt;p&gt;
&lt;img src="/Documentation/Images/sample/Battleship.jpg" alt="" align="left" /&gt;
We found a very nice VB6 sample, that allows two opponents to play battleship from two different computers, even across the Internet. The program consists of a server portion and a client portion, and the two use the Winsock control to communicate. The VB6 code uses also a lot of graphic statements to implement a nice user interface.
&lt;/p&gt;
&lt;p&gt;
Thanks to VB Migration Partner, it took us only a few minutes and some pragmas to convert this game to VB.NET. 
&lt;/p&gt;
&lt;p&gt;
You can find the result in our &lt;a href="http://www.vbmigration.com/Blog/Documentation/codesamples.aspx" target="_blank"&gt;Code Sample &lt;/a&gt;section. Enjoy!&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=VSWA1I"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=VSWA1I" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=qYNVRI"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=qYNVRI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.vbmigration.com/Blog/post/2008/03/Play-battleship-with-VB-Migration-Partner!.aspx</link>
      <author>Admin</author>
      <comments>http://www.vbmigration.com/Blog/post/2008/03/Play-battleship-with-VB-Migration-Partner!.aspx#comment</comments>
      <guid>http://www.vbmigration.com/Blog/post.aspx?id=d28e70b6-d584-43ba-a8ee-c4ea306e113e</guid>
      <pubDate>Tue, 11 Mar 2008 23:07:00 -0700</pubDate>
      <category>VB Migration Partner</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://www.vbmigration.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.vbmigration.com/Blog/post.aspx?id=d28e70b6-d584-43ba-a8ee-c4ea306e113e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.vbmigration.com/Blog/trackback.axd?id=d28e70b6-d584-43ba-a8ee-c4ea306e113e</trackback:ping>
      <wfw:comment>http://www.vbmigration.com/Blog/post/2008/03/Play-battleship-with-VB-Migration-Partner!.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.vbmigration.com/Blog/syndication.axd?post=d28e70b6-d584-43ba-a8ee-c4ea306e113e</wfw:commentRss>
    </item>
    <item>
      <title>One step closer to release 1.0 !</title>
      <description>&lt;p&gt;
Last night we released version 0.95. It doesn&amp;#39;t add any new feature, yet it is an important milestones because this version has reached the &lt;em&gt;&lt;strong&gt;zero-known-bug &lt;/strong&gt;&lt;/em&gt;stage for the parser &amp;amp; code generation engine. We are quickly fixing all the known problems in the support library and are getting closer to the official 1.0 release.&lt;img src="/Blog/admin/tiny_mce/plugins/emotions/images/smiley-smile.gif" border="0" alt="Smile" title="Smile" /&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
The new parser &amp;amp; code generator is truly as sophisticated as it can possibly be. Here&amp;#39;s a little example of what version 0.95 is able to do.
&lt;/p&gt;
&lt;p&gt;
Consider the following statements:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim tw As New TextboxWrapper&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ....&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; tw.FieldBox = Form1.Text1 &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;#39; where FieldBox is defined in TextboxWrapper.cls as a property that takes and returns a TextBox control 
&lt;/p&gt;
&lt;p&gt;
According to standard VB6 rules, the lack of the SET keyword &lt;em&gt;&lt;strong&gt;should &lt;/strong&gt;&lt;/em&gt;imply that you are assigning the default Text property of Form1.Text1 to the default Text property of the control referenced by the FieldBox property. As a matter of fact, the Upgrade Wizard that comes with Visual Studio (as well as previous versions of VB Migration Partner) translate the above assignment as follows:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; tw.FieldBox.Text = Form1.Text1.Text
&lt;/p&gt;
&lt;p&gt;
However, one of our beta testers discovered the following undocumented VB6 behavior: if the FieldBox is (mistakenly) defined by means of a Property Let procedure (instead of Property Set), then VB6 performs an object reference assignment even if the SET keyword has been omitted. Never head of it previously! However, we want to promote VB Migration Partner as a &lt;em&gt;&amp;quot;It just works!&amp;quot; &lt;/em&gt;code migrator, therefore we decided to emit VB.NET code that perfectly mimics the original VB6 behavior:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; tw.FieldBox = Form1.Text1 &amp;nbsp;&amp;nbsp; &amp;#39; in VB.NET this is an object assignment
&lt;/p&gt;
&lt;p&gt;
I am not mentioning this feature because I think it will be of interested to many VB Migration Partner users, but only to emphasize that our code translator is easily the most sophisticated you can find anywhere...
&lt;/p&gt;
&lt;p&gt;
&lt;img src="/Documentation/Images/sample/coolProgressBar.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
Together with version 0.95 we are releasing a new code sample, named &lt;a href="http://www.vbmigration.com/Blog/Documentation/codesamples.aspx" target="_blank"&gt;&lt;strong&gt;Cool ProgressBar&lt;/strong&gt;&lt;/a&gt;.
It&amp;#39;s a custom control written in VB6 which, as its name implies,
implements a better, eye-catching progress bar, with gradient colors
and other intriguing features. It&amp;#39;s a nontrivial piece of code that
uses a lot of Windows API and GDI programming, yet it took us just a
few minutes (and 4 pragmas) to migrate it correctly to VB.NET. Even if
you don&amp;#39;t care about VB Migration Partner, you can download the code
sample to see how those features were implemented and - if you wish -
use this new control in your .NET apps.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=wpKqqI"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=wpKqqI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/VbMigrationPartner?a=EUN0mI"&gt;&lt;img src="http://feeds.feedburner.com/~f/VbMigrationPartner?i=EUN0mI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.vbmigration.com/Blog/post/2008/03/One-step-closer-to-release-10-!.aspx</link>
      <author>Admin</author>
      <comments>http://www.vbmigration.com/Blog/post/2008/03/One-step-closer-to-release-10-!.aspx#comment</comments>
      <guid>http://www.vbmigration.com/Blog/post.aspx?id=652fb153-35fa-4107-8498-3077751d74a1</guid>
      <pubDate>Thu, 06 Mar 2008 00:31:00 -0700</pubDate>
      <category>VB Migration Partner</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://www.vbmigration.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.vbmigration.com/Blog/post.aspx?id=652fb153-35fa-4107-8498-3077751d74a1</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.vbmigration.com/Blog/trackback.axd?id=652fb153-35fa-4107-8498-3077751d74a1</trackback:ping>
      <wfw:comment>http://www.vbmigration.com/Blog/post/2008/03/One-step-closer-to-release-10-!.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.vbmigration.com/Blog/syndication.axd?post=652fb153-35fa-4107-8498-3077751d74a1</wfw:commentRss>
    </item>
  </channel>
</rss>
