<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.artinsoft.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Mauricio Rojas Blog</title><subtitle type="html" /><id>http://blogs.artinsoft.net/mrojas/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.artinsoft.net/mrojas/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.artinsoft.net/mrojas/atom.aspx" /><generator uri="http://communityserver.org" version="3.1.20917.1142">Community Server</generator><updated>2008-06-05T16:07:00Z</updated><entry><title>ADODB RecordSet Save in C# ASP.NET</title><link rel="alternate" type="text/html" href="http://blogs.artinsoft.net/mrojas/archive/2008/10/09/adodb-recordset-save-in-c-asp-net.aspx" /><id>http://blogs.artinsoft.net/mrojas/archive/2008/10/09/adodb-recordset-save-in-c-asp-net.aspx</id><published>2008-10-09T15:10:00Z</published><updated>2008-10-09T15:10:00Z</updated><content type="html">&lt;p&gt;I saw this with Francisco and this is one possible solution:&lt;/p&gt;




&lt;div class="Section1"&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT:0.5in;"&gt;&lt;b&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="FONT-WEIGHT:bold;FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;ASP Source&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT:0.5in;"&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;rs.Save Response, adPersistXML&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT:0.5in;"&gt;&lt;font size="2"&gt;&lt;span style="FONT-FAMILY:Arial;"&gt;rs is an ADODB.RecordSet variable, and its result is being written to the ASP Response&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT:0.5in;"&gt;&lt;b&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="FONT-WEIGHT:bold;FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;Wrong Migration&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT:0.5in;"&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;rs.Save(Response &lt;b&gt;&lt;font color="#ff0000"&gt;&amp;lt;-- The ASP.NET Response is not COM, ADODB.Recordset is a COM object&lt;/font&gt;&lt;/b&gt;, ADODB.PersistFormatEnum.adPersistXML);&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT:0.5in;"&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;&amp;nbsp;So we cannot write directly to the ASP.NET response. We need a COM Stream object&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT:0.5in;"&gt;&lt;b&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="FONT-WEIGHT:bold;FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;Solution&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT:0.5in;"&gt;&lt;font face="Arial" color="#0000ff" size="2"&gt;&lt;span style="FONT-WEIGHT:700;FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;ADODB.Stream s = new ADODB.Stream();&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="TEXT-INDENT:0.5in;"&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;rs.Save(&lt;b&gt;&lt;font color="#0000ff"&gt;s&lt;/font&gt;&lt;/b&gt;, ADODB.PersistFormatEnum.adPersistXML);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="TEXT-INDENT:0.5in;"&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;Response.Write(&lt;b&gt;&lt;font color="#0000ff"&gt;s.ReadText(-1)&lt;/font&gt;&lt;/b&gt;);&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="TEXT-INDENT:0.5in;"&gt;&lt;font size="2"&gt;&lt;span style="FONT-FAMILY:Arial;"&gt;In this example an &lt;/span&gt;&lt;/font&gt;ADODB.Stream object is created, data is written into it and the it is flushed to the ASP.NET response&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1698" width="1" height="1"&gt;</content><author><name>Mrojas</name><uri>http://blogs.artinsoft.net/members/Mrojas.aspx</uri></author><category term="VIsual Basic .NET" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx" /><category term="ASP Migration" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/ASP+Migration/default.aspx" /><category term="VB6 Migration" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx" /><category term="Software Development" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx" /></entry><entry><title>OutOfProcess In C#</title><link rel="alternate" type="text/html" href="http://blogs.artinsoft.net/mrojas/archive/2008/10/02/outofprocess-in-c.aspx" /><id>http://blogs.artinsoft.net/mrojas/archive/2008/10/02/outofprocess-in-c.aspx</id><published>2008-10-02T22:49:00Z</published><updated>2008-10-02T22:49:00Z</updated><content type="html">&lt;p&gt;In VB6 you could create an OutOfProcess instance to execute some actions. But there is not a direct equivalent for that. However you can run a class in an another application domain to produce a similar effect that can be helpful in a couple of scenarios.&lt;/p&gt;
&lt;p&gt;This example consists of two projects. One is a console application, and the other is a Class Library that holds a Class that we want to run like an &amp;quot;OutOfProcess&amp;quot; instance. In this scenario. The console application does not necessary know the type of the object before hand. This technique can be used for example for a Plugin or Addin implementation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Code for Console Application&lt;/strong&gt;&lt;/p&gt;
&lt;table class=""&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.IO;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Reflection;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; OutOfProcess
{
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// This example shows how to create an object in an&lt;/span&gt;
    &lt;span class="rem"&gt;/// OutOfProcess similar way.&lt;/span&gt;
    &lt;span class="rem"&gt;/// In VB6 you were able to create an ActiveX-EXE, so you could create&lt;/span&gt;
    &lt;span class="rem"&gt;/// objects that execute in their own process space.&lt;/span&gt;
    &lt;span class="rem"&gt;/// In some scenarios this can be achieved in .NET by creating &lt;/span&gt;
    &lt;span class="rem"&gt;/// instances that run in their own&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;#39;ApplicationDomain&amp;#39;.&lt;/span&gt;
    &lt;span class="rem"&gt;/// This simple class shows how to do that.&lt;/span&gt;
    &lt;span class="rem"&gt;/// Disclaimer: This is a quick and dirty implementation.&lt;/span&gt;
    &lt;span class="rem"&gt;/// The idea is get some comments about it.&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;class&lt;/span&gt; Program
    {
        &lt;span class="kwrd"&gt;delegate&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ReportFunction(String message);

        &lt;span class="kwrd"&gt;class&lt;/span&gt; RemoteTextWriter : TextWriter
        {
            ReportFunction report;
            &lt;span class="kwrd"&gt;public&lt;/span&gt; RemoteTextWriter(ReportFunction report)
            {
                &lt;span class="kwrd"&gt;this&lt;/span&gt;.report = report;
            }
            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; Encoding Encoding
            {
                get
                {
                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; UnicodeEncoding(&lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;);
                }
            }

            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Flush()
            {
                &lt;span class="rem"&gt;//Nothing to do here&lt;/span&gt;
            }


            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Write(&lt;span class="kwrd"&gt;char&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;)
            {
                &lt;span class="rem"&gt;//ignore&lt;/span&gt;
            }

            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Write(&lt;span class="kwrd"&gt;string&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;)
            {

                report(&lt;span class="kwrd"&gt;value&lt;/span&gt;);
            }

            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; WriteLine(&lt;span class="kwrd"&gt;string&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;)
            {

                report(&lt;span class="kwrd"&gt;value&lt;/span&gt;);
            }

            &lt;span class="rem"&gt;//This is very important. Specially if you have a long running process&lt;/span&gt;
            &lt;span class="rem"&gt;// Remoting has a concept called Lifetime Management.&lt;/span&gt;
            &lt;span class="rem"&gt;//This method makes your remoting objects Inmmortals&lt;/span&gt;
            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; InitializeLifetimeService()
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            }

        }

        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ReportOut(String message)
        {
            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;[stdout] &amp;quot;&lt;/span&gt; + message);
        }

        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ReportError(String message)
        {
            ConsoleColor oldColor = Console.ForegroundColor;
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;[stderr] &amp;quot;&lt;/span&gt; + message);
            Console.ForegroundColor = oldColor;
        }

        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ExecuteAsOutOfProcess(String assemblyFilePath,String typeName)
        {
            RemoteTextWriter outWriter = &lt;span class="kwrd"&gt;new&lt;/span&gt; RemoteTextWriter(ReportOut);
            RemoteTextWriter errorWriter = &lt;span class="kwrd"&gt;new&lt;/span&gt; RemoteTextWriter(ReportError);

            &lt;span class="rem"&gt;//&amp;lt;-- This is my path, change it for your app&lt;/span&gt;


            &lt;span class="rem"&gt;//Type superProcessType = AspUpgradeAssembly.GetType(&amp;quot;OutOfProcessClass.SuperProcess&amp;quot;);&lt;/span&gt;
            AppDomain outofProcessDomain = 
                AppDomain.CreateDomain(&lt;span class="str"&gt;&amp;quot;outofprocess_test1&amp;quot;&lt;/span&gt;, 
                AppDomain.CurrentDomain.Evidence, 
                AppDomain.CurrentDomain.BaseDirectory, 
                AppDomain.CurrentDomain.RelativeSearchPath, 
                AppDomain.CurrentDomain.ShadowCopyFiles);
            &lt;span class="rem"&gt;//When the invoke member is called this event must return the assembly&lt;/span&gt;

            AppDomain.CurrentDomain.AssemblyResolve += &lt;span class="kwrd"&gt;new&lt;/span&gt; ResolveEventHandler(outofProcessDomain_AssemblyResolve);
            Object outofProcessObject = 
                outofProcessDomain.CreateInstanceFromAndUnwrap(
                assemblyFilePath, typeName);
            assemblyPath = assemblyFilePath;
            outofProcessObject.
                GetType().InvokeMember(&lt;span class="str"&gt;&amp;quot;SetOut&amp;quot;&lt;/span&gt;, 
                BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, 
                &lt;span class="kwrd"&gt;null&lt;/span&gt;, outofProcessObject, &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt;[] { outWriter });
            outofProcessObject.
                GetType().InvokeMember(&lt;span class="str"&gt;&amp;quot;SetError&amp;quot;&lt;/span&gt;, 
                BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, 
                &lt;span class="kwrd"&gt;null&lt;/span&gt;, outofProcessObject, &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt;[] { errorWriter });
            outofProcessObject.
                GetType().InvokeMember(&lt;span class="str"&gt;&amp;quot;Execute&amp;quot;&lt;/span&gt;, 
                BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, 
                &lt;span class="kwrd"&gt;null&lt;/span&gt;, outofProcessObject, &lt;span class="kwrd"&gt;null&lt;/span&gt;);
            Console.ReadLine();

        }

        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
        {
            &lt;span class="kwrd"&gt;string&lt;/span&gt; testAssemblyPath = 
                &lt;span class="str"&gt;@&amp;quot;B:\OutOfProcess\OutOfProcess\OutOfProcessClasss\bin\Debug\OutOfProcessClasss.dll&amp;quot;&lt;/span&gt;;
            ExecuteAsOutOfProcess(testAssemblyPath, &lt;span class="str"&gt;&amp;quot;OutOfProcessClass.SuperProcess&amp;quot;&lt;/span&gt;);

        }

        &lt;span class="kwrd"&gt;static&lt;/span&gt; String assemblyPath = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
        &lt;span class="kwrd"&gt;static&lt;/span&gt; Assembly outofProcessDomain_AssemblyResolve(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, ResolveEventArgs args)
        {

            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
                &lt;span class="rem"&gt;//We must load it to have the metadata and do reflection&lt;/span&gt;
                &lt;span class="kwrd"&gt;return&lt;/span&gt; Assembly.LoadFrom(assemblyPath);
            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt;
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            }
        }

    }


}
&lt;/pre&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Code for OutOfProcess Class&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; OutOfProcessClass
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; SuperProcess : MarshalByRefObject
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetOut(System.IO.TextWriter newOut)
        {
            Console.SetOut(newOut);
        }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetError(System.IO.TextWriter newError)
        {
            Console.SetError(newError);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Execute()
        {
            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 1; i &amp;lt; 5000; i++)
            {
                Console.WriteLine(&lt;span class="str"&gt;&amp;quot;running running running &amp;quot;&lt;/span&gt;);
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (i%100 == 0) Console.Error.Write(&lt;span class="str"&gt;&amp;quot;an error happened&amp;quot;&lt;/span&gt;);
                
            }

        }
    }
}
&lt;/pre&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1695" width="1" height="1"&gt;</content><author><name>Mrojas</name><uri>http://blogs.artinsoft.net/members/Mrojas.aspx</uri></author><category term="VIsual Basic .NET" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx" /><category term="VB6 Migration" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx" /><category term="C#" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx" /><category term="Software Development" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx" /></entry><entry><title>Visual Studio 2005. Missing Attach To Process Option</title><link rel="alternate" type="text/html" href="http://blogs.artinsoft.net/mrojas/archive/2008/09/30/visual-studio-2005-missing-attach-to-process-option.aspx" /><id>http://blogs.artinsoft.net/mrojas/archive/2008/09/30/visual-studio-2005-missing-attach-to-process-option.aspx</id><published>2008-09-30T22:53:00Z</published><updated>2008-09-30T22:53:00Z</updated><content type="html">&lt;p&gt;We found some machines that do not show the &amp;quot;Attach To Process&amp;quot; option.&lt;/p&gt;
&lt;p&gt;This is very important for us, specially if you are testing the migration of an VB6 ActiveX EXE or ActiveX DLL to C#.&lt;/p&gt;
&lt;p&gt;There is a bug reported by Microsoft &lt;a href="http://support.microsoft.com/kb/929664"&gt;http://support.microsoft.com/kb/929664&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Just follow the Tool/Import Settings wizard to the end. Close and restart VS and the options will reapper.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Also you might find that the Configuration Manager is not available to switch between Release and Build for example.&lt;/p&gt;
&lt;p&gt;To fix this problem just go to Tools -&amp;gt; Options -&amp;gt; Projects and Solutions -&amp;gt; General... make sure the option &amp;quot;Show advanced build configurations&amp;quot; is checked. &lt;br /&gt;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1694" width="1" height="1"&gt;</content><author><name>Mrojas</name><uri>http://blogs.artinsoft.net/members/Mrojas.aspx</uri></author><category term="VB6 Migration" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx" /><category term="Software Development" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx" /><category term="COM" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/COM/default.aspx" /></entry><entry><title>TLBIMP SourceCode</title><link rel="alternate" type="text/html" href="http://blogs.artinsoft.net/mrojas/archive/2008/09/30/tlbimp-sourcecode.aspx" /><id>http://blogs.artinsoft.net/mrojas/archive/2008/09/30/tlbimp-sourcecode.aspx</id><published>2008-09-30T20:50:00Z</published><updated>2008-09-30T20:50:00Z</updated><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Have you ever wished to modify the way Visual Studio imported a COM Class. Well finally you can.&lt;/p&gt;
&lt;p&gt;The &lt;span class="Apple-style-span" style="WORD-SPACING:0px;FONT:bold 26px &amp;#39;Segoe UI&amp;#39;;TEXT-TRANSFORM:none;TEXT-INDENT:0px;WHITE-SPACE:normal;LETTER-SPACING:normal;BORDER-COLLAPSE:separate;orphans:2;widows:2;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;-webkit-text-decorations-in-effect:none;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0;"&gt;&lt;span id="ctl00_ctl00_WideContent_ProjectTitleControl1_TitleLabel"&gt;&lt;a class="NoUnderline" id="ctl00_ctl00_WideContent_ProjectTitleControl1_ProjectTitleLink" style="TEXT-DECORATION:underline;" href="http://www.codeplex.com/clrinterop"&gt;Managed, Native, and COM Interop Team&lt;/a&gt;&lt;span style="COLOR:#000000;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;(wow what a name). It looks like the name of that goverment office in the Ironman movie.&lt;/p&gt;
&lt;p&gt;Well this fine group of men, have release the source code of the TLBIMP tool. I&amp;#39;m more that happy for this.&lt;/p&gt;
&lt;p&gt;I can know finally get why are some things imported the way they are.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.codeplex.com/clrinterop"&gt;http://www.codeplex.com/clrinterop&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can dowload also the P/Invoke assistant. This assistant has a library of signatures so you can invoke any Windows API.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1693" width="1" height="1"&gt;</content><author><name>Mrojas</name><uri>http://blogs.artinsoft.net/members/Mrojas.aspx</uri></author><category term="VIsual Basic .NET" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx" /><category term=".NET General Tip" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/.NET+General+Tip/default.aspx" /><category term="VB6 Migration" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx" /><category term="C#" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx" /><category term="Software Development" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx" /><category term="COM" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/COM/default.aspx" /><category term="Interop" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/Interop/default.aspx" /></entry><entry><title>NewWindow2 Events in the C#  WebBrowserControl</title><link rel="alternate" type="text/html" href="http://blogs.artinsoft.net/mrojas/archive/2008/09/18/newwindow2-events-in-the-c-webbrowsercontrol.aspx" /><id>http://blogs.artinsoft.net/mrojas/archive/2008/09/18/newwindow2-events-in-the-c-webbrowsercontrol.aspx</id><published>2008-09-18T16:34:00Z</published><updated>2008-09-18T16:34:00Z</updated><content type="html">&lt;p&gt;The WebBrowser control for .NET is just a wrapper for the IE ActiveX control. However this wrapper does not expose all the events that the IE ActiveX control exposes.&lt;/p&gt;
&lt;p&gt;For example the ActiveX control has a NewWindow2 that you can use to intercept when a new window is gonna be created and you can even use the ppDisp variable to give a pointer to an IE ActiveX instance where you want the new window to be displayed.&lt;/p&gt;
&lt;p&gt;So, our solution was to extend the WebBrowser control to make some of those events public.&lt;/p&gt;
&lt;p&gt;In general the solution is the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a new Class for your Event that extend any of the basic EventArgs classes.&lt;/li&gt;
&lt;li&gt;Add constructors and property accessor to the class&lt;/li&gt;
&lt;li&gt;Look at the IE Activex info and add the&amp;nbsp; DWebBrowserEvents2 and IWebBrowser2 COM interfaces. We need them to make our hooks.&lt;/li&gt;
&lt;li&gt;Create a WebBrowserExtendedEvents extending System.Runtime.InteropServices.StandardOleMarshalObject and DWebBrowserEvents2. We need this class to intercept the ActiveX events. Add methos for all the events that you want to intercept.&lt;/li&gt;
&lt;li&gt;Extend the WebBrowser control overriding the CreateSink and DetachSink methods, here is where the WebBrowserExtendedEvents class is used to make the conneciton.&lt;/li&gt;
&lt;li&gt;Add EventHandler for all the events.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;And thats all.Here is the code. Just add it to a file like ExtendedWebBrowser.cs&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Forms;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.ComponentModel;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Runtime.InteropServices;

    &lt;span class="rem"&gt;//First define a new EventArgs class to contain the newly exposed data&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; NewWindow2EventArgs : CancelEventArgs
    {

        &lt;span class="kwrd"&gt;object&lt;/span&gt; ppDisp;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; PPDisp
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; ppDisp; }
            set { ppDisp = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }


        &lt;span class="kwrd"&gt;public&lt;/span&gt; NewWindow2EventArgs(&lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; ppDisp, &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; cancel)
            : &lt;span class="kwrd"&gt;base&lt;/span&gt;()
        {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.ppDisp = ppDisp;
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.Cancel = cancel;
        }
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; DocumentCompleteEventArgs : EventArgs
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; ppDisp;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; url;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; PPDisp
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; ppDisp; }
            set { ppDisp = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; Url
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; url; }
            set { url = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }

       &lt;span class="kwrd"&gt;public&lt;/span&gt; DocumentCompleteEventArgs(&lt;span class="kwrd"&gt;object&lt;/span&gt; ppDisp,&lt;span class="kwrd"&gt;object&lt;/span&gt; url)
        {
           &lt;span class="kwrd"&gt;this&lt;/span&gt;.ppDisp = ppDisp;
           &lt;span class="kwrd"&gt;this&lt;/span&gt;.url = url;

        }
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CommandStateChangeEventArgs : EventArgs
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;long&lt;/span&gt; command;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; enable;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; CommandStateChangeEventArgs(&lt;span class="kwrd"&gt;long&lt;/span&gt; command, &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; enable)
        {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.command = command;
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.enable = enable;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;long&lt;/span&gt; Command
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; command; }
            set { command = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; Enable
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; enable; }
            set { enable = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }
    }


    &lt;span class="rem"&gt;//Extend the WebBrowser control&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ExtendedWebBrowser : WebBrowser
    {
        AxHost.ConnectionPointCookie cookie;
        WebBrowserExtendedEvents events;


        &lt;span class="rem"&gt;//This method will be called to give you a chance to create your own event sink&lt;/span&gt;
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CreateSink()
        {
            &lt;span class="rem"&gt;//MAKE SURE TO CALL THE BASE or the normal events won&amp;#39;t fire&lt;/span&gt;
            &lt;span class="kwrd"&gt;base&lt;/span&gt;.CreateSink();
            events = &lt;span class="kwrd"&gt;new&lt;/span&gt; WebBrowserExtendedEvents(&lt;span class="kwrd"&gt;this&lt;/span&gt;);
            cookie = &lt;span class="kwrd"&gt;new&lt;/span&gt; AxHost.ConnectionPointCookie(&lt;span class="kwrd"&gt;this&lt;/span&gt;.ActiveXInstance, events, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(DWebBrowserEvents2));

        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; Application
        {
            get
            {
                IWebBrowser2 axWebBrowser = &lt;span class="kwrd"&gt;this&lt;/span&gt;.ActiveXInstance &lt;span class="kwrd"&gt;as&lt;/span&gt; IWebBrowser2;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (axWebBrowser != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    &lt;span class="kwrd"&gt;return&lt;/span&gt; axWebBrowser.Application;
                }
                &lt;span class="kwrd"&gt;else&lt;/span&gt;
                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            }
        }

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DetachSink()
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;null&lt;/span&gt; != cookie)
            {
                cookie.Disconnect();
                cookie = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            }
            &lt;span class="kwrd"&gt;base&lt;/span&gt;.DetachSink();
        }

        &lt;span class="rem"&gt;//This new event will fire for the NewWindow2&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;NewWindow2EventArgs&amp;gt; NewWindow2;

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnNewWindow2(&lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; ppDisp, &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; cancel)
        {
            EventHandler&amp;lt;NewWindow2EventArgs&amp;gt; h = NewWindow2;
            NewWindow2EventArgs args = &lt;span class="kwrd"&gt;new&lt;/span&gt; NewWindow2EventArgs(&lt;span class="kwrd"&gt;ref&lt;/span&gt; ppDisp, &lt;span class="kwrd"&gt;ref&lt;/span&gt; cancel);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;null&lt;/span&gt; != h)
            {
                h(&lt;span class="kwrd"&gt;this&lt;/span&gt;, args);
            }
            &lt;span class="rem"&gt;//Pass the cancellation chosen back out to the events&lt;/span&gt;
            &lt;span class="rem"&gt;//Pass the ppDisp chosen back out to the events&lt;/span&gt;
            cancel = args.Cancel;
            ppDisp = args.PPDisp;
        }


        &lt;span class="rem"&gt;//This new event will fire for the DocumentComplete&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;DocumentCompleteEventArgs&amp;gt; DocumentComplete;

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnDocumentComplete(&lt;span class="kwrd"&gt;object&lt;/span&gt; ppDisp, &lt;span class="kwrd"&gt;object&lt;/span&gt; url)
        {
            EventHandler&amp;lt;DocumentCompleteEventArgs&amp;gt; h = DocumentComplete;
            DocumentCompleteEventArgs args = &lt;span class="kwrd"&gt;new&lt;/span&gt; DocumentCompleteEventArgs( ppDisp, url);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;null&lt;/span&gt; != h)
            {
                h(&lt;span class="kwrd"&gt;this&lt;/span&gt;, args);
            }
            &lt;span class="rem"&gt;//Pass the ppDisp chosen back out to the events&lt;/span&gt;
            ppDisp = args.PPDisp;
            &lt;span class="rem"&gt;//I think url is readonly&lt;/span&gt;
        }

        &lt;span class="rem"&gt;//This new event will fire for the DocumentComplete&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;CommandStateChangeEventArgs&amp;gt; CommandStateChange;

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnCommandStateChange(&lt;span class="kwrd"&gt;long&lt;/span&gt; command, &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; enable)
        {
            EventHandler&amp;lt;CommandStateChangeEventArgs&amp;gt; h = CommandStateChange;
            CommandStateChangeEventArgs args = &lt;span class="kwrd"&gt;new&lt;/span&gt; CommandStateChangeEventArgs(command, &lt;span class="kwrd"&gt;ref&lt;/span&gt; enable);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;null&lt;/span&gt; != h)
            {
                h(&lt;span class="kwrd"&gt;this&lt;/span&gt;, args);
            }
        }


        &lt;span class="rem"&gt;//This class will capture events from the WebBrowser&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; WebBrowserExtendedEvents : System.Runtime.InteropServices.StandardOleMarshalObject, DWebBrowserEvents2
        {
            ExtendedWebBrowser _Browser;
            &lt;span class="kwrd"&gt;public&lt;/span&gt; WebBrowserExtendedEvents(ExtendedWebBrowser browser)
            { _Browser = browser; }

            &lt;span class="rem"&gt;//Implement whichever events you wish&lt;/span&gt;
            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; NewWindow2(&lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; pDisp, &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; cancel)
            {
                _Browser.OnNewWindow2(&lt;span class="kwrd"&gt;ref&lt;/span&gt; pDisp, &lt;span class="kwrd"&gt;ref&lt;/span&gt; cancel);
            }

            &lt;span class="rem"&gt;//Implement whichever events you wish&lt;/span&gt;
            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DocumentComplete(&lt;span class="kwrd"&gt;object&lt;/span&gt; pDisp,&lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; url)
            {
                _Browser.OnDocumentComplete( pDisp, url);
            }

            &lt;span class="rem"&gt;//Implement whichever events you wish&lt;/span&gt;
            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CommandStateChange(&lt;span class="kwrd"&gt;long&lt;/span&gt; command, &lt;span class="kwrd"&gt;bool&lt;/span&gt; enable)
            {
                _Browser.OnCommandStateChange( command,  &lt;span class="kwrd"&gt;ref&lt;/span&gt; enable);
            }


        }
        [ComImport, Guid(&lt;span class="str"&gt;&amp;quot;34A715A0-6587-11D0-924A-0020AFC7AC4D&amp;quot;&lt;/span&gt;), InterfaceType(ComInterfaceType.InterfaceIsIDispatch), TypeLibType(TypeLibTypeFlags.FHidden)]
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; DWebBrowserEvents2
        {
            [DispId(0x69)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; CommandStateChange([In] &lt;span class="kwrd"&gt;long&lt;/span&gt; command, [In] &lt;span class="kwrd"&gt;bool&lt;/span&gt; enable);
            [DispId(0x103)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; DocumentComplete([In, MarshalAs(UnmanagedType.IDispatch)] &lt;span class="kwrd"&gt;object&lt;/span&gt; pDisp, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; URL);
            [DispId(0xfb)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; NewWindow2([In, Out, MarshalAs(UnmanagedType.IDispatch)] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; pDisp, [In, Out] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; cancel);
        }

        [ComImport, Guid(&lt;span class="str"&gt;&amp;quot;D30C1661-CDAF-11d0-8A3E-00C04FC9E26E&amp;quot;&lt;/span&gt;), TypeLibType(TypeLibTypeFlags.FOleAutomation | TypeLibTypeFlags.FDual | TypeLibTypeFlags.FHidden)]
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IWebBrowser2
        {
            [DispId(100)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; GoBack();
            [DispId(0x65)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; GoForward();
            [DispId(0x66)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; GoHome();
            [DispId(0x67)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; GoSearch();
            [DispId(0x68)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; Navigate([In] &lt;span class="kwrd"&gt;string&lt;/span&gt; Url, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; flags, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; targetFrameName, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; postData, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; headers);
            [DispId(-550)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; Refresh();
            [DispId(0x69)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; Refresh2([In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; level);
            [DispId(0x6a)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; Stop();
            [DispId(200)]
            &lt;span class="kwrd"&gt;object&lt;/span&gt; Application { [&lt;span class="kwrd"&gt;return&lt;/span&gt;: MarshalAs(UnmanagedType.IDispatch)] get; }
            [DispId(0xc9)]
            &lt;span class="kwrd"&gt;object&lt;/span&gt; Parent { [&lt;span class="kwrd"&gt;return&lt;/span&gt;: MarshalAs(UnmanagedType.IDispatch)] get; }
            [DispId(0xca)]
            &lt;span class="kwrd"&gt;object&lt;/span&gt; Container { [&lt;span class="kwrd"&gt;return&lt;/span&gt;: MarshalAs(UnmanagedType.IDispatch)] get; }
            [DispId(0xcb)]
            &lt;span class="kwrd"&gt;object&lt;/span&gt; Document { [&lt;span class="kwrd"&gt;return&lt;/span&gt;: MarshalAs(UnmanagedType.IDispatch)] get; }
            [DispId(0xcc)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; TopLevelContainer { get; }
            [DispId(0xcd)]
            &lt;span class="kwrd"&gt;string&lt;/span&gt; Type { get; }
            [DispId(0xce)]
            &lt;span class="kwrd"&gt;int&lt;/span&gt; Left { get; set; }
            [DispId(0xcf)]
            &lt;span class="kwrd"&gt;int&lt;/span&gt; Top { get; set; }
            [DispId(0xd0)]
            &lt;span class="kwrd"&gt;int&lt;/span&gt; Width { get; set; }
            [DispId(0xd1)]
            &lt;span class="kwrd"&gt;int&lt;/span&gt; Height { get; set; }
            [DispId(210)]
            &lt;span class="kwrd"&gt;string&lt;/span&gt; LocationName { get; }
            [DispId(0xd3)]
            &lt;span class="kwrd"&gt;string&lt;/span&gt; LocationURL { get; }
            [DispId(0xd4)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; Busy { get; }
            [DispId(300)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; Quit();
            [DispId(0x12d)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; ClientToWindow(&lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; pcx, &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; pcy);
            [DispId(0x12e)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; PutProperty([In] &lt;span class="kwrd"&gt;string&lt;/span&gt; property, [In] &lt;span class="kwrd"&gt;object&lt;/span&gt; vtValue);
            [DispId(0x12f)]
            &lt;span class="kwrd"&gt;object&lt;/span&gt; GetProperty([In] &lt;span class="kwrd"&gt;string&lt;/span&gt; property);
            [DispId(0)]
            &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; }
            [DispId(-515)]
            &lt;span class="kwrd"&gt;int&lt;/span&gt; HWND { get; }
            [DispId(400)]
            &lt;span class="kwrd"&gt;string&lt;/span&gt; FullName { get; }
            [DispId(0x191)]
            &lt;span class="kwrd"&gt;string&lt;/span&gt; Path { get; }
            [DispId(0x192)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; Visible { get; set; }
            [DispId(0x193)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; StatusBar { get; set; }
            [DispId(0x194)]
            &lt;span class="kwrd"&gt;string&lt;/span&gt; StatusText { get; set; }
            [DispId(0x195)]
            &lt;span class="kwrd"&gt;int&lt;/span&gt; ToolBar { get; set; }
            [DispId(0x196)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; MenuBar { get; set; }
            [DispId(0x197)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; FullScreen { get; set; }
            [DispId(500)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; Navigate2([In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; URL, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; flags, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; targetFrameName, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; postData, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; headers);
            [DispId(0x1f7)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; ShowBrowserBar([In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; pvaClsid, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; pvarShow, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; pvarSize);
            [DispId(-525)]
            WebBrowserReadyState ReadyState { get; }
            [DispId(550)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; Offline { get; set; }
            [DispId(0x227)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; Silent { get; set; }
            [DispId(0x228)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; RegisterAsBrowser { get; set; }
            [DispId(0x229)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; RegisterAsDropTarget { get; set; }
            [DispId(0x22a)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; TheaterMode { get; set; }
            [DispId(0x22b)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; AddressBar { get; set; }
            [DispId(0x22c)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; Resizable { get; set; }
        }
   }
&lt;/pre&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1689" width="1" height="1"&gt;</content><author><name>Mrojas</name><uri>http://blogs.artinsoft.net/members/Mrojas.aspx</uri></author><category term="VIsual Basic .NET" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx" /><category term=".NET General Tip" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/.NET+General+Tip/default.aspx" /><category term="VB6 Migration" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx" /><category term="C#" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx" /><category term="Software Development" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx" /></entry><entry><title>Using C# or VB.NET collection in your VB6 Applications</title><link rel="alternate" type="text/html" href="http://blogs.artinsoft.net/mrojas/archive/2008/08/28/using-c-or-vb-net-collection-in-your-vb6-applications.aspx" /><id>http://blogs.artinsoft.net/mrojas/archive/2008/08/28/using-c-or-vb-net-collection-in-your-vb6-applications.aspx</id><published>2008-08-28T16:34:00Z</published><updated>2008-08-28T16:34:00Z</updated><content type="html">&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;p&gt;If you have some .NET code that you want to share with VB6, COM has always been a nice option. You just add couple of ComVisible tags and that&amp;#39;s all.&lt;/p&gt;&lt;p&gt;But...&lt;/p&gt;&lt;p&gt;Collections can be a little tricky. &lt;/p&gt;&lt;p&gt;This is a simple example of how to expose your Collections To VB6. &lt;/p&gt;&lt;p&gt;Here I create an ArrayList descendant that you can use to expose your collections. &lt;br /&gt;Just create a new C# class library project and add the code below. &lt;br /&gt;Remember to check the Register for ComInterop setting.&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Runtime.InteropServices;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; CollectionsInterop
{
    
    [Guid(&lt;span class="str"&gt;&amp;quot;0490E147-F2D2-4909-A4B8-3533D2F264D0&amp;quot;&lt;/span&gt;)]
    [ComVisible(&lt;span class="kwrd"&gt;true&lt;/span&gt;)]
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IMyCollectionInterface 
    {

        &lt;span class="kwrd"&gt;int&lt;/span&gt; Add(&lt;span class="kwrd"&gt;object&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;);
        &lt;span class="kwrd"&gt;void&lt;/span&gt; Clear();
        &lt;span class="kwrd"&gt;bool&lt;/span&gt; Contains(&lt;span class="kwrd"&gt;object&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; IndexOf(&lt;span class="kwrd"&gt;object&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;);
        &lt;span class="kwrd"&gt;void&lt;/span&gt; Insert(&lt;span class="kwrd"&gt;int&lt;/span&gt; index, &lt;span class="kwrd"&gt;object&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;);
        &lt;span class="kwrd"&gt;void&lt;/span&gt; Remove(&lt;span class="kwrd"&gt;object&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;);
        &lt;span class="kwrd"&gt;void&lt;/span&gt; RemoveAt(&lt;span class="kwrd"&gt;int&lt;/span&gt; index);

        [DispId(-4)]
        System.Collections.IEnumerator GetEnumerator();
      
        [DispId(0)]
        [System.Runtime.CompilerServices.IndexerName(&lt;span class="str"&gt;&amp;quot;_Default&amp;quot;&lt;/span&gt;)]
        &lt;span class="kwrd"&gt;object&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;[&lt;span class="kwrd"&gt;int&lt;/span&gt; index]
        {
            get;
        }
    }

    
    [ComVisible(&lt;span class="kwrd"&gt;true&lt;/span&gt;)]
    [ClassInterface(ClassInterfaceType.None)]
    [ComDefaultInterface(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(IMyCollectionInterface))]
    [ProgId(&lt;span class="str"&gt;&amp;quot;CollectionsInterop.VB6InteropArrayList&amp;quot;&lt;/span&gt;)]
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; VB6InteropArrayList : System.Collections.ArrayList, IMyCollectionInterface
    {

        &lt;span class="preproc"&gt;#region&lt;/span&gt; IMyCollectionInterface Members


        &lt;span class="rem"&gt;// COM friendly strong typed GetEnumerator&lt;/span&gt;

        [DispId(-4)]
        &lt;span class="kwrd"&gt;public&lt;/span&gt; System.Collections.IEnumerator GetEnumerator()
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;base&lt;/span&gt;.GetEnumerator();
        }



        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;
    }



    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Simple object for example &lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    [ComVisible(&lt;span class="kwrd"&gt;true&lt;/span&gt;)]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ProgId(&lt;span class="str"&gt;&amp;quot;CollectionsInterop.MyObject&amp;quot;&lt;/span&gt;)]
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MyObject
    {
        String value1 = &lt;span class="str"&gt;&amp;quot;nulo&amp;quot;&lt;/span&gt;;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; String Value1
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; value1; }
            set { value1 = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }
        String value2 = &lt;span class="str"&gt;&amp;quot;nulo&amp;quot;&lt;/span&gt;;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; String Value2
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; value2; }
            set { value2 = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }
    }


}
&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;To test this code you can use this VB6 code. Remember to add a reference to this class library.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; Form_Load()
    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; simpleCollection &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; CollectionsInterop.VB6InteropArrayList
    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; CollectionsInterop.MyObject
    value.Value1 = &lt;span class="str"&gt;&amp;quot;Mi valor1&amp;quot;&lt;/span&gt;
    value.Value2 = &lt;span class="str"&gt;&amp;quot;Autre valeur&amp;quot;&lt;/span&gt;
    simpleCollection.Add value
    
    &lt;span class="kwrd"&gt;For&lt;/span&gt; &lt;span class="kwrd"&gt;Each&lt;/span&gt; c &lt;span class="kwrd"&gt;In&lt;/span&gt; simpleCollection
      MsgBox value.Value1
    &lt;span class="kwrd"&gt;Next&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1674" width="1" height="1"&gt;</content><author><name>Mrojas</name><uri>http://blogs.artinsoft.net/members/Mrojas.aspx</uri></author><category term="VIsual Basic .NET" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx" /><category term=".NET General Tip" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/.NET+General+Tip/default.aspx" /><category term="VB6 Migration" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx" /><category term="C#" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx" /><category term="Software Development" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx" /></entry><entry><title>Natural Languages and Programming Languages</title><link rel="alternate" type="text/html" href="http://blogs.artinsoft.net/mrojas/archive/2008/08/19/natural-languages-and-programming-languages.aspx" /><id>http://blogs.artinsoft.net/mrojas/archive/2008/08/19/natural-languages-and-programming-languages.aspx</id><published>2008-08-19T20:36:00Z</published><updated>2008-08-19T20:36:00Z</updated><content type="html">&lt;p&gt;I am&amp;nbsp;a firm&amp;nbsp;believer in program understanding and in that our&amp;nbsp;computer skills will allow us to develop programs that will understand programs&amp;nbsp;and maybe in the future even write some of them :).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;I also&amp;nbsp;belive that natural languages ans programming languages are two things with a lot&amp;nbsp;in common.&lt;/p&gt;
&lt;p&gt;These are just some&amp;nbsp;ideas about this subject.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;&amp;quot;A language convertion translates one languate to another language, while a language-level upgrade moves an application from an older version of a language to a modern or more standardized version of that same language. In both cases, the goal is to improve portability and understanbility of an application and position that application for subsequent transformation&amp;quot;,&lt;/font&gt;&lt;/em&gt; Legacy Systems, Transformation Strategies by&amp;nbsp; William M. Ulrich.&lt;/p&gt;
&lt;p&gt;An natural language convertion is exactly that. Translating one language to another language.&lt;/p&gt;
&lt;p&gt;Natural language processing and transformation have a lot in common with automated source code migration. There is a lot of grammar studies on both areas, and a lot of common algorithms.&lt;/p&gt;
&lt;p&gt;I keep quoting:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;Comparing artificial language and natural language it is very helpful to our understanding of semantics of programming languages since programming languages are artificial. We can see much similarity between these two kinds of languages: &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Both of them must explain &amp;quot;given&amp;#39;&amp;quot; languages.&lt;br /&gt;The goal of research on semantics of programming languages &lt;strong&gt;is the same&lt;/strong&gt; as that of natural language: &lt;strong&gt;explanation of the meanings of given language&lt;/strong&gt;. This is unavoidable for natural language but undesirable for programming language. The latter one has often led to post-design analysis of the semantics of programming languages wherein the syntax and informal meaning of the language is treated as given( such as PL/I, Fortran and C ). Then the research on the semantics is to understand the semantics of the language in another way or to sort out anomalies, ommisions, or defects in the given semantics-which hasn&amp;#39;t had much impact on the language design. We have another kind of programming languages that have formal definitions, such as Pascal, Ada, SML. The given semantics allow this kind of programming language to be more robust than the previous ones. &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Both of them separate &amp;quot;syntax&amp;#39;&amp;quot; and &amp;quot;semantics&amp;#39;&amp;quot;. &lt;br /&gt;Despite these similarities, the difference between the studies of natural and artificial language is profound. First of all, natural language existed for thousands of years, nobody knows who designed the language; but artificial languages are synthesized by logicians and computer scientists to meet some specific design criteria. Thus, `` the most basic characteritic of the distinction is the fact that an artificial language can be fully circumscribed and studied in its entirety.&amp;#39;&amp;#39; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;We already have developed a mature system for SYNTAX. In 1950&amp;#39;s, linguist Chomsky first proposed &lt;strong&gt;formal language theory&lt;/strong&gt; for English, thus came up with Formal Language Theory, Grammar, Regular Grammar, CFG etc. The ``first&amp;#39;&amp;#39; application of this theory was to define syntax for Algol and to build parser for it. The landmarks in the development of formal language theory are: Knuth&amp;#39;s&amp;nbsp; parser, and YACC-which is a successful and ``final&amp;#39;&amp;#39;application of formal language theory. &lt;br /&gt;&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;from Cornell university &lt;a href="http://www.cs.cornell.edu/info/projects/nuprl/cs611/fall94notes/cn2/cn2.html"&gt;http://www.cs.cornell.edu/info/projects/nuprl/cs611/fall94notes/cn2/cn2.html&lt;/a&gt;&lt;br /&gt;Jing Huang&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;I also will like to add a reference from an interesting work related to&amp;nbsp;&lt;em&gt;pattern recognition&lt;/em&gt; a technique used both in natural language processing (see for example &lt;a href="http://prhlt.iti.es/"&gt;http://prhlt.iti.es/&lt;/a&gt;) and reverse engineering.&lt;br /&gt;This work is from Francesca Arcelli and Claudia Raibulet from Italy and they are working with the NASA Automated Software EngineeringResearch Center &lt;br /&gt;&lt;a href="http://smallwiki.unibe.ch/woor2006/woor2006paper3/?action=MimeView"&gt;http://smallwiki.unibe.ch/woor2006/woor2006paper3/?action=MimeView&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1671" width="1" height="1"&gt;</content><author><name>Mrojas</name><uri>http://blogs.artinsoft.net/members/Mrojas.aspx</uri></author><category term="VB6 Migration" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx" /><category term="Software Development" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx" /></entry><entry><title>Scripting your applications in .NET</title><link rel="alternate" type="text/html" href="http://blogs.artinsoft.net/mrojas/archive/2008/08/14/scripting-your-applications-in-net.aspx" /><id>http://blogs.artinsoft.net/mrojas/archive/2008/08/14/scripting-your-applications-in-net.aspx</id><published>2008-08-15T03:48:00Z</published><updated>2008-08-15T03:48:00Z</updated><content type="html">&lt;p&gt;In VB6 it was very simple to add scripting capabilities to your application.&lt;br /&gt;Just by using the Microsoft Script Control Library&lt;br /&gt;You can still use this library in .NET just as Roy Osherove&amp;#39; Bloc show in&lt;br /&gt;&lt;a href="http://weblogs.asp.net/rosherove/articles/dotnetscripting.aspx"&gt;http://weblogs.asp.net/rosherove/articles/dotnetscripting.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;However there are some minor details that must be taken care of:&lt;/p&gt;
&lt;p&gt;* Objects must be exposed thru COM (Add the [ComVisible(true)] attribute to the class&lt;br /&gt;* Add the ComVisible(true) attribute to the AssemblyInfo file&lt;br /&gt;* Make these objects public&lt;br /&gt;* Recommended (put your calls to Eval or ExecuteStatement inside try-catch blocks).&lt;/p&gt;
&lt;p&gt;And here&amp;#39;s an example:&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Forms;&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; ScriptingDotNetTest&lt;/pre&gt;&lt;pre class="alt"&gt;{&lt;/pre&gt;&lt;pre&gt;    [System.Runtime.InteropServices.ComVisible(&lt;span class="kwrd"&gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; frmTestVBScript  : Form&lt;/pre&gt;&lt;pre&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; MyBackColor&lt;/pre&gt;&lt;pre&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; System.Drawing.ColorTranslator.ToOle(&lt;span class="kwrd"&gt;this&lt;/span&gt;.BackColor); }&lt;/pre&gt;&lt;pre&gt;            set { &lt;span class="kwrd"&gt;this&lt;/span&gt;.BackColor = System.Drawing.ColorTranslator.FromOle(&lt;span class="kwrd"&gt;value&lt;/span&gt;); }&lt;/pre&gt;&lt;pre class="alt"&gt;        }&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;        MSScriptControl.ScriptControl sc = &lt;span class="kwrd"&gt;new&lt;/span&gt; MSScriptControl.ScriptControl();&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RunScript(Object eventSender, EventArgs eventArgs)&lt;/pre&gt;&lt;pre class="alt"&gt;        {&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;            {&lt;/pre&gt;&lt;pre&gt;                sc.Language = &lt;span class="str"&gt;&amp;quot;VbScript&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;                sc.Reset();&lt;/pre&gt;&lt;pre&gt;                sc.AddObject(&lt;span class="str"&gt;&amp;quot;myform&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;                sc.ExecuteStatement(&lt;span class="str"&gt;&amp;quot;myform.MyBackColor = vbRed&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;            }&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;catch&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;                MSScriptControl.IScriptControl iscriptControl = sc &lt;span class="kwrd"&gt;as&lt;/span&gt; MSScriptControl.IScriptControl;&lt;/pre&gt;&lt;pre&gt;                lblError.Text = &lt;span class="str"&gt;&amp;quot;ERROR&amp;quot;&lt;/span&gt; + iscriptControl.Error.Description + &lt;span class="str"&gt;&amp;quot; | Line of error: &amp;quot;&lt;/span&gt; + iscriptControl.Error.Line + &lt;span class="str"&gt;&amp;quot; | Code error: &amp;quot;&lt;/span&gt; + iscriptControl.Error.Text;&lt;/pre&gt;&lt;pre class="alt"&gt;            }&lt;/pre&gt;&lt;pre&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;        [STAThread]&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main()&lt;/pre&gt;&lt;pre&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;            Application.Run(&lt;span class="kwrd"&gt;new&lt;/span&gt; frmTestVBScript());&lt;/pre&gt;&lt;pre&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;    }&lt;/pre&gt;&lt;pre&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;TIP: If you don find the reference in the COM tab, just browse to c:\windows\system32\msscript.ocx&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1664" width="1" height="1"&gt;</content><author><name>Mrojas</name><uri>http://blogs.artinsoft.net/members/Mrojas.aspx</uri></author><category term="VIsual Basic .NET" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx" /><category term="VB6 Migration" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx" /><category term="C#" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx" /></entry><entry><title>Vb Migration (not for the weak of mind) Post 2</title><link rel="alternate" type="text/html" href="http://blogs.artinsoft.net/mrojas/archive/2008/08/14/vb-migration-not-for-the-weak-of-mind-post-2.aspx" /><id>http://blogs.artinsoft.net/mrojas/archive/2008/08/14/vb-migration-not-for-the-weak-of-mind-post-2.aspx</id><published>2008-08-14T16:50:00Z</published><updated>2008-08-14T16:50:00Z</updated><content type="html">&lt;p&gt;When people decide to migrate their VB6 applications they eventually end up questioning where they should go. Is VB.NET or C# a good choice?&lt;/p&gt;
&lt;p&gt;I have my personal preference, but my emphasis is in developing the technology to take where YOU want to go.&lt;/p&gt;
&lt;p&gt;VB.NET is a VB dialect very similar to VB6. It supports several constructs and it makes the changes easier. &lt;br /&gt;C# has several differences from VB6, but it has it a growing language with lots of enthusiasts in its community.&lt;br /&gt;Obviously migrating VB6 to VB dialect is a task far more easier than migrating to a different language. &lt;br /&gt;However we are a research company with years of work in this area and challenges is just what we love.&lt;/p&gt;
&lt;p&gt;Let&amp;#39;s use a methaphor here.&lt;/p&gt;
&lt;p&gt;My beautiful wife, was born in Moscow, Russia. Like her, I really enjoy reading a good book. Some of my favorite authors are&lt;br /&gt;russian authors like Dostoievsky, Tolstoi and Chejov. However I still do not speak russian. I have tried, and I will keep trying but&lt;br /&gt;I still don&amp;#39;t know russian. I have read only translations of their books, and I really enjoy them.&lt;br /&gt;As a native speaker my wife always tells me, that it is not the same to read those books in another language besides russian.&lt;br /&gt;And they are phrases (specially in Chejov books that I might not completely understand) but I really got the author&lt;br /&gt;message and enjoyed it.&lt;br /&gt;Translating a book from russian to a more similar language like Ucranian is easier than translating it to English or Spanish.&lt;br /&gt;But I think everybody agrees that is a task than can be done.&lt;/p&gt;
&lt;p&gt;You can use terrible works case scenarios, but these scenarios must be analized. &lt;br /&gt;Let see (I took these example from the link in that Francesco put in my previous post &lt;a href="http://blogs.artinsoft.net/mrojas/archive/2008/08/07/vb-migration-not-for-the-weak-of-mind.aspx"&gt;http://blogs.artinsoft.net/mrojas/archive/2008/08/07/vb-migration-not-for-the-weak-of-mind.aspx&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;If you have code like this:&lt;/p&gt;
&lt;p&gt;Sub CopyFiles(ByVal throwIfError As Boolean)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Not throwIfError Then On Error Resume Next&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim fso As New FileSystemObject&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fso.CopyFile &amp;quot;sourcefile1&amp;quot;, &amp;quot;destfile1&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fso.CopyFile &amp;quot;sourcefile2&amp;quot;, &amp;quot;destfile2&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fso.CopyFile &amp;quot;sourcefile3&amp;quot;, &amp;quot;destfile3&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; seven more CopyFile method calls …&lt;br /&gt;End Sub &lt;/p&gt;
&lt;p&gt;&lt;br /&gt;and you translate it to:&lt;/p&gt;
&lt;p&gt;void CopyFiles(bool throwIfError)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scripting.FileSystemObject fso = new Scripting.FileSystemObjectClass();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fso.CopyFile(&amp;quot;sourcefile1&amp;quot;, &amp;quot;destfile1&amp;quot;, true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (throwIfError)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fso.CopyFile(&amp;quot;sourcefile1&amp;quot;, &amp;quot;destfile1&amp;quot;, true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (throwIfError)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fso.CopyFile(&amp;quot;sourcefile1&amp;quot;, &amp;quot;destfile1&amp;quot;, true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (throwIfError)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // seven more try-catch blocks&lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;I think that the russian is really keep in this translation.&lt;/p&gt;
&lt;p&gt;First of all. When you do a translation, you should try to make it as native as possible. So why will you keep using a COM function when there is an&lt;br /&gt;equivalent in .NET. So why not use System.IO.File.CopyFile(&amp;quot;sourcefile1&amp;quot;, &amp;quot;destfile1&amp;quot;, true); instead?&lt;/p&gt;
&lt;p&gt;Second of all. The On Error Resume Next, I agree is a not a natural statement in C#. I really think that using it could provide results that are less predictable.&lt;br /&gt;Why? Becuase after executing it, are you sure that all the CopyFile occurred successfully? I would prefer wrapping the whole code inside a try-catch instead of trying&lt;br /&gt;to provide an implementation that is not natural in C#, will Aspect Oriented programming provide a clean solution for this cases. Maybe?&lt;/p&gt;
&lt;p&gt;RPG and COBOL to Object Oriented Programming, PowerBuilder to C#, Hierarquical Databases to Relational Databases are just the kind of challenges we have faced in our research project.&lt;br /&gt;Not everything is easy, and we might not be able to automate all the tasks (commonly due to the cost of implementing the automation not becuase of feasability).&lt;/p&gt;
&lt;p&gt;But at the end Could you understand the whole novel?, even if you didn&amp;#39;t understand the joke in the one of the paragraphs in the page?&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My years of reading make be belive that you can.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1662" width="1" height="1"&gt;</content><author><name>Mrojas</name><uri>http://blogs.artinsoft.net/members/Mrojas.aspx</uri></author><category term="VIsual Basic .NET" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx" /><category term="ASP Migration" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/ASP+Migration/default.aspx" /><category term="VB6 Migration" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx" /><category term="C#" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx" /><category term="Software Development" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx" /></entry><entry><title>C# Console Applications and Ctrl-C </title><link rel="alternate" type="text/html" href="http://blogs.artinsoft.net/mrojas/archive/2008/08/11/c-console-applications-and-ctrl-c.aspx" /><id>http://blogs.artinsoft.net/mrojas/archive/2008/08/11/c-console-applications-and-ctrl-c.aspx</id><published>2008-08-11T20:41:00Z</published><updated>2008-08-11T20:41:00Z</updated><content type="html">&lt;p&gt;Console applications are still very useful for me.&lt;br /&gt;I write like 125 console applications in the morning and like 4 or 5 in the afternoon.&lt;br /&gt;In one of these applications that was running a long process I just started wandering:&lt;br /&gt;what will happen with Lost? Will ABC ever finish this series? &lt;br /&gt;And If someone presses Ctrl-C will I be able to catch it?&lt;br /&gt;And indeed, the greate C# provides a very easi way to do it:&lt;br /&gt;&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;&lt;pre&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;            Console.CancelKeyPress += &lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;delegate&lt;/span&gt;(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, ConsoleCancelEventArgs e)&lt;/pre&gt;&lt;pre class="alt"&gt;            {&lt;/pre&gt;&lt;pre&gt;                Artinsoft.VBUMKernel.Implementations.UpgradeCommand.StopAllUpgradeProcess(&lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;                Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Process aborted by user!&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;            };&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="rem"&gt;//Long running process&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        }&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1660" width="1" height="1"&gt;</content><author><name>Mrojas</name><uri>http://blogs.artinsoft.net/members/Mrojas.aspx</uri></author><category term="VIsual Basic .NET" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx" /><category term=".NET General Tip" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/.NET+General+Tip/default.aspx" /><category term="C#" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx" /><category term="Software Development" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx" /></entry><entry><title>VB Migration (not for the weak of mind)</title><link rel="alternate" type="text/html" href="http://blogs.artinsoft.net/mrojas/archive/2008/08/07/vb-migration-not-for-the-weak-of-mind.aspx" /><id>http://blogs.artinsoft.net/mrojas/archive/2008/08/07/vb-migration-not-for-the-weak-of-mind.aspx</id><published>2008-08-07T16:14:00Z</published><updated>2008-08-07T16:14:00Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;&lt;font size="5"&gt;Motivation:&lt;/font&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I hate to be disappointed. Specially if it is by a person you had respect for. And that&amp;#39;s exactly what Francisco Balena from VB Migration Partner, has done. I have respected him for his books and all his VB6 experience. In terms of legacy VB6 code he is a monster. He is the man.&lt;/p&gt;
&lt;p&gt;But in terms of code migration... &lt;/p&gt;
&lt;p&gt;I&amp;#39;m not saying this because I work on code migration or maybe I&amp;#39;m biased a little by the fact that I work almost 10 years with a company that has done source code migration research on a big number of legacy languages such as COBOL, RPG, PL\1, Algol, Progress, PowerBuilder and also VB6.&lt;/p&gt;
&lt;p&gt;I can tell the difference between a &amp;quot;compiler&amp;quot; and a system that rewrites a expression to the closest equivalent in the target language. We are aware of limitations. We are aware of paradigm differences and functional equivalence, but we talk from experience. We talk about our results. And we have proven those things we talk about.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Let&amp;#39;s says you create a Cobol Library with a &amp;quot;MOVE&amp;quot; function, and a COBOLPicture Type and add minus, divide, and add operators. And I write something like:&lt;/p&gt;
&lt;p&gt;CobolPicture x = new CobolPicture(&amp;quot;XXXX&amp;quot;);&lt;/p&gt;
&lt;p&gt;x.move(10);&lt;/p&gt;
&lt;p&gt;x.add(10);&lt;/p&gt;
&lt;p&gt;We have things like that, and it works. It&amp;#39;s feasible and maybe there are cases where that is a solution. But we are also proud of have researchers that have been able to detect pattern to rewrite something like that like:&lt;/p&gt;
&lt;p&gt;int x = 0;&lt;/p&gt;
&lt;p&gt;x = 10;&lt;/p&gt;
&lt;p&gt;x+=10;&lt;/p&gt;
&lt;p&gt;And saying, that something is not possible just because you can&amp;#39;t or you dont like it, just seem uneducated to me.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;All of this has motivated me to start a series of chapters I for a small blog book I will call VB Migration (not for the weak of mind).&lt;/p&gt;
&lt;p&gt;For those of you, who really are tecnology savvy and are in the process of a VB Migration, this is YOUR book.&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1659" width="1" height="1"&gt;</content><author><name>Mrojas</name><uri>http://blogs.artinsoft.net/members/Mrojas.aspx</uri></author><category term="VIsual Basic .NET" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx" /><category term="ASP Migration" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/ASP+Migration/default.aspx" /><category term="VB6 Migration" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx" /><category term="C#" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx" /><category term="Software Development" scheme="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx" /></entry><entry><title>Migrating RDS CreateRecordSet in .NET</title><link rel="alternate" type="text/html" href="http://blogs.artinsoft.net/mrojas/archive/2008/06/19/migrating-rds-createrecordset-in-net.aspx" /><id>http://blogs.artinsoft.net/mrojas/archive/2008/06/19/migrating-rds-createrecordset-in-net.aspx</id><published>2008-06-19T17:24:00Z</published><updated>2008-06-19T17:24:00Z</updated><content type="html">&lt;p&gt;This is way a discused with a friend for migrating a VB6 RDS CreateRecordset&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; Foo(rs &lt;span class="kwrd"&gt;As&lt;/span&gt; ADOR.Recordset) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Boolean&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;On&lt;/span&gt; &lt;span class="kwrd"&gt;Error&lt;/span&gt; &lt;span class="kwrd"&gt;GoTo&lt;/span&gt; Failed&lt;/pre&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; ColumnInfo(0 &lt;span class="kwrd"&gt;To&lt;/span&gt; 1), c0(0 &lt;span class="kwrd"&gt;To&lt;/span&gt; 3), c1(0 &lt;span class="kwrd"&gt;To&lt;/span&gt; 3)&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; auxVar &lt;span class="kwrd"&gt;As&lt;/span&gt; RDS.DataControl&lt;/pre&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;Set&lt;/span&gt; auxVar = &lt;span class="kwrd"&gt;New&lt;/span&gt; RDS.DataControl&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;    ColInfo(0) = Array(&lt;span class="str"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;CInt&lt;/span&gt;(201), &lt;span class="kwrd"&gt;CInt&lt;/span&gt;(1024), &lt;span class="kwrd"&gt;True&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;    ColInfo(1) = Array(&lt;span class="str"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;CInt&lt;/span&gt;(129), &lt;span class="kwrd"&gt;CInt&lt;/span&gt;(255), &lt;span class="kwrd"&gt;True&lt;/span&gt;)&lt;/pre&gt;&lt;pre class="alt"&gt;   &lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;Set&lt;/span&gt; rs = auxVar.CreateRecordSet(ColumnInfo)&lt;/pre&gt;&lt;pre class="alt"&gt;    Foo = &lt;span class="kwrd"&gt;True&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;Failed:&lt;/pre&gt;&lt;pre&gt;    Foo = &lt;span class="kwrd"&gt;False&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;    &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;According to MSDN the CreateRecordset function takes a Varriant array with definitions for the columns. This definitions are made up of four parts&lt;/font&gt;&lt;/p&gt;&lt;font face="Times New Roman" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;table class="MsoNormalTable" style="BORDER-RIGHT:#dddddd 1pt solid;BORDER-TOP:#dddddd 1pt solid;MARGIN:auto auto auto 39.75pt;BORDER-LEFT:#dddddd 1pt solid;WIDTH:97%;BORDER-BOTTOM:#dddddd 1pt solid;mso-cellspacing:1.5pt;mso-border-alt:solid #DDDDDD .75pt;" cellpadding="0" class="MsoNormalTable"&gt;

&lt;tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes;"&gt;
&lt;td class="" style="BORDER-RIGHT:#dddddd;PADDING-RIGHT:3.75pt;BORDER-TOP:#dddddd;PADDING-LEFT:3.75pt;BACKGROUND:#cccccc;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#dddddd;PADDING-TOP:3.75pt;BORDER-BOTTOM:#c8cdde 1pt solid;mso-border-bottom-alt:solid #C8CDDE .75pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;COLOR:#000066;FONT-FAMILY:Verdana;"&gt;Attribute &lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#dddddd;PADDING-RIGHT:3.75pt;BORDER-TOP:#dddddd;PADDING-LEFT:3.75pt;BACKGROUND:#cccccc;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#dddddd;PADDING-TOP:3.75pt;BORDER-BOTTOM:#c8cdde 1pt solid;mso-border-bottom-alt:solid #C8CDDE .75pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;COLOR:#000066;FONT-FAMILY:Verdana;"&gt;Description &lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:1;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Name&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Name of the column header.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:2;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Type&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Integer of the data type.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:3;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Size&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Integer of the width in characters, regardless of data type.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:4;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Nullability&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Boolean value.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:5;mso-yfti-lastrow:yes;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Scale (Optional)&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;This optional attribute defines the scale for numeric fields. If this value is not specified, numeric values will be truncated to a scale of three. Precision is not affected, but the number of digits following the decimal point will be truncated to three.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;font face="Times New Roman" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;So if we are going to migrate to System.Data.DataColumn we will used a type translation like the following (for now I’m just putting some simple cases)&lt;/font&gt;&lt;/p&gt;&lt;font face="Times New Roman" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;table class="MsoNormalTable" style="BORDER-RIGHT:#dddddd 1pt solid;BORDER-TOP:#dddddd 1pt solid;MARGIN:auto auto auto 3.75pt;BORDER-LEFT:#dddddd 1pt solid;WIDTH:97%;BORDER-BOTTOM:#dddddd 1pt solid;mso-cellspacing:1.5pt;mso-border-alt:solid #DDDDDD .75pt;" cellpadding="0" class="MsoNormalTable"&gt;

&lt;tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes;"&gt;
&lt;td class="" style="BORDER-RIGHT:#dddddd;PADDING-RIGHT:3.75pt;BORDER-TOP:#dddddd;PADDING-LEFT:3.75pt;BACKGROUND:#cccccc;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#dddddd;PADDING-TOP:3.75pt;BORDER-BOTTOM:#c8cdde 1pt solid;mso-border-bottom-alt:solid #C8CDDE .75pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;COLOR:#000066;FONT-FAMILY:Verdana;"&gt;Length &lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#dddddd;PADDING-RIGHT:3.75pt;BORDER-TOP:#dddddd;PADDING-LEFT:3.75pt;BACKGROUND:#cccccc;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#dddddd;PADDING-TOP:3.75pt;BORDER-BOTTOM:#c8cdde 1pt solid;mso-border-bottom-alt:solid #C8CDDE .75pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;COLOR:#000066;FONT-FAMILY:Verdana;"&gt;Constant &lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#dddddd;PADDING-RIGHT:3.75pt;BORDER-TOP:#dddddd;PADDING-LEFT:3.75pt;BACKGROUND:#cccccc;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#dddddd;PADDING-TOP:3.75pt;BORDER-BOTTOM:#c8cdde 1pt solid;mso-border-bottom-alt:solid #C8CDDE .75pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;COLOR:#000066;FONT-FAMILY:Verdana;"&gt;Number &lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#dddddd;PADDING-RIGHT:3.75pt;BORDER-TOP:#dddddd;PADDING-LEFT:3.75pt;BACKGROUND:#cccccc;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#dddddd;PADDING-TOP:3.75pt;BORDER-BOTTOM:#c8cdde 1pt solid;mso-border-bottom-alt:solid #C8CDDE .75pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;COLOR:#000066;FONT-FAMILY:Verdana;"&gt;DataColumn Type&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:1;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adTinyInt&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;16&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;typeof(byte)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:2;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adSmallInt&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;typeof(short)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:3;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adInteger&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;typeof(int)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:4;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adBigInt&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;20&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:5;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adUnsignedTinyInt&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;17&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:6;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adUnsignedSmallInt&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;18&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:7;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adUnsignedInt&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;19&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:8;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adUnsignedBigInt&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;21&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:9;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adSingle&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;4&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:10;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adDouble&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;5&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:11;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adCurrency&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;6&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:12;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adDecimal&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;14&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:13;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adNumeric&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;131&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:14;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adBoolean&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;11&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:15;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adError&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;10&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:16;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adGuid&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;72&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;typeof(System.Guid)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:17;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adDate&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;7&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Typeof(System.DateTime)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:18;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adDBDate&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;133&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:19;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adDBTime&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;134&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:20;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Fixed&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adDBTimestamp&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;135&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:21;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Variable&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adBSTR&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;8&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:22;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Variable&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;adChar&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;129&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;typeof(string)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:23;"&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BACKGROUND:white;PADDING-BOTTOM:3.75pt;BORDER-LEFT:#d5d5d3 1pt solid;PADDING-TOP:3.75pt;BORDER-BOTTOM:#d5d5d3 1pt solid;mso-border-alt:solid #D5D5D3 .75pt;mso-border-right-alt:solid #CCCCCC .25pt;"&gt;&lt;span style="FONT-SIZE:8.5pt;FONT-FAMILY:Verdana;"&gt;Variable&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#cccccc 1pt solid;PADDING-RIGHT:3.75pt;BORDER-TOP:#d5d5d3 1pt solid;PADDING-LEFT:3.75pt;BAC