<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.artinsoft.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ArtinSoft's Blogs</title><link>http://blogs.artinsoft.net/</link><description>Software Migration Experts</description><dc:language>en-US</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>AutoCAD VBA Migration to VB.NET or C#</title><link>http://blogs.artinsoft.net/mrojas/archive/2010/03/05/autocad-vba-migration-to-vb-net-or-c.aspx</link><pubDate>Fri, 05 Mar 2010 19:56:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:2091</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;AutoCAD 2010 &lt;a href="http://usa.autodesk.com/adsk/servlet/ps/item?siteID=123112&amp;amp;id=12900036&amp;amp;linkID=9240617"&gt;will not be supporting VBA&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Quoting &lt;/p&gt;  &lt;p&gt;&lt;em&gt;“If you utilize VBA macros in your work environment, they will no longer work unless the VBA module is installed on your system. “     &lt;br /&gt;&lt;/em&gt;&lt;em&gt;“When you run a command that requires VBA, a message dialog box will be displayed stating that VBA is no longer installed with AutoCAD and directing you to a website where you can download the VBA module. “&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;And also you can see that Autodesk states: &lt;strong&gt;“Autodesk is evaluating how long VBA will be supported in Autodesk products in the future. Though supported in the AutoCAD 2010-based products, it may or may not be supported in future releases. Therefore, it is strongly recommended that VB developers develop all new code using VB .NET.&lt;/strong&gt;”&lt;/p&gt;  &lt;p&gt;VBA does not support 64bit systems in a native way.&lt;/p&gt;  &lt;p&gt;But If you want some advice from the VB migration experts or help on your migration project from VBA to VB.NET or C# you can us contact &lt;a href="http://www.artinsoft.com/ms_contactneeds.aspx?idn=16"&gt;Artinsoft Migration Services&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;We build the VB Upgrade Wizard that shipped with Visual Studio and have been doing VB migrations for years.&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=2091" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx">VIsual Basic .NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx">VB6 Migration</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/64-bit/default.aspx">64-bit</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/migration/default.aspx">migration</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VB.NET/default.aspx">VB.NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/upgrade/default.aspx">upgrade</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Visual+Basic+to+.NET/default.aspx">Visual Basic to .NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/AutoCAD/default.aspx">AutoCAD</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/AutoDESK/default.aspx">AutoDESK</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/migra/default.aspx">migra</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/vba/default.aspx">vba</category></item><item><title>VB6.0 Legacy Migration article at Visual Studio Magazine</title><link>http://blogs.artinsoft.net/jose_aguilar_blog/archive/2010/03/03/legacy-migration-at-visual-studio-magazine.aspx</link><pubDate>Wed, 03 Mar 2010 16:54:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:2090</guid><dc:creator>Jaguilar</dc:creator><slash:comments>0</slash:comments><description>In it March issue, Visual Studio Magazine published an in-depth article about legacy migrations called “Unlocking Legacy Code”. This article talks about the challenges faced by companies migrating from Visual Basic 6.0 to .NET, the drivers behind these migrations and the pros and cons of using an automated migration solution....(&lt;a href="http://blogs.artinsoft.net/jose_aguilar_blog/archive/2010/03/03/legacy-migration-at-visual-studio-magazine.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=2090" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/News/default.aspx">News</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/ArtinSoft/default.aspx">ArtinSoft</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Visual+Basic+to+.NET/default.aspx">Visual Basic to .NET</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Why+Migrate_3F00_/default.aspx">Why Migrate?</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Case+Studies/default.aspx">Case Studies</category></item><item><title>Error Handling Customizations</title><link>http://blogs.artinsoft.net/jose_aguilar_blog/archive/2010/02/16/error-handling-customizations.aspx</link><pubDate>Tue, 16 Feb 2010 21:52:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:2089</guid><dc:creator>Jaguilar</dc:creator><slash:comments>0</slash:comments><description>One very common requirement for migration projects is to adapt certain error handling patterns used in a customer’s Visual Basic 6.0 code to the structured error handling provided by .NET, cleaning up the code, improving its maintainability, and, whenever possible, complying with .NET best practices. ...(&lt;a href="http://blogs.artinsoft.net/jose_aguilar_blog/archive/2010/02/16/error-handling-customizations.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=2089" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/VBUC/default.aspx">VBUC</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Visual+Basic+to+.NET/default.aspx">Visual Basic to .NET</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Visual+Basic+to+C_2300_/default.aspx">Visual Basic to C#</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Visual+Basic+Upgrade+Companion/default.aspx">Visual Basic Upgrade Companion</category></item><item><title>DataGridView does not show Horizontal scrollbar</title><link>http://blogs.artinsoft.net/mrojas/archive/2010/02/16/datagridview-does-not-show-horizontal-scrollbar.aspx</link><pubDate>Tue, 16 Feb 2010 21:25:22 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:2088</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;During a migration from a FlexGrid to a DataGridView, we encountered a situation where the HorizontalScrollBar did not show.&lt;/p&gt;  &lt;p&gt;I found many suggestions like setting a MinimumColWidth value for all columns, etc.&lt;/p&gt;  &lt;p&gt;But it wasn’t until my friend Jesus added a line like:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;mygrid.DockStyle = DockStyle.Fill &lt;/p&gt;  &lt;p&gt;that the HorizontalScrollBar appear. &lt;/p&gt;  &lt;p&gt;It might just be that the grid was too big for form but just for the record this is a possible solution.&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=2088" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/migration/default.aspx">migration</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/DataGridView/default.aspx">DataGridView</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/FlexGrid/default.aspx">FlexGrid</category></item><item><title>Escape characters for SQLLoader</title><link>http://blogs.artinsoft.net/mrojas/archive/2010/02/09/escape-characters-for-sqlloader.aspx</link><pubDate>Wed, 10 Feb 2010 05:49:50 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:2085</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The LINC/EAE migration tool can automatically generate reports that can be used to extract your data from DMSII to your target database, for example Oracle.    &lt;br /&gt;In this scenarios the Oracle SQL Loader tool is used. However you might problems loading the data because the string values can contain the same characters you are using to enclose them.&lt;/p&gt;  &lt;p&gt;Let’s see an example, taken from an oracle forum:&lt;/p&gt;   &lt;pre class="csharpcode"&gt;C:\ora&amp;gt;type buyer.ctl
&lt;span class="kwrd"&gt;LOAD&lt;/span&gt; &lt;span class="kwrd"&gt;DATA&lt;/span&gt;
INFILE &lt;span class="str"&gt;&amp;#39;buyer.data&amp;#39;&lt;/span&gt;
&lt;span class="kwrd"&gt;truncate&lt;/span&gt; &lt;span class="kwrd"&gt;into&lt;/span&gt; &lt;span class="kwrd"&gt;table&lt;/span&gt; BUYER
FIELDS TERMINATED &lt;span class="kwrd"&gt;BY&lt;/span&gt; &lt;span class="str"&gt;&amp;#39;,&amp;#39;&lt;/span&gt; optionally enclosed &lt;span class="kwrd"&gt;by&lt;/span&gt; &lt;span class="str"&gt;&amp;#39;&amp;quot;&amp;#39;&lt;/span&gt; &lt;span class="kwrd"&gt;TRAILING&lt;/span&gt; NULLCOLS
(
buyer_code,
BUYER_NAME
)&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&amp;#160;&lt;/pre&gt;

&lt;p&gt;And suppose you have data like:&lt;/p&gt;


&lt;div class="csharpcode"&gt;
  &lt;pre&gt;1,&amp;quot;XYZ IND&amp;quot;&lt;/pre&gt;

  &lt;pre class="alt"&gt;2,&amp;quot;ABC&amp;quot;&lt;/pre&gt;

  &lt;pre&gt;3,&amp;quot;XYZ ABC&amp;quot;&lt;/pre&gt;

  &lt;pre class="alt"&gt;4,&amp;quot;Your &amp;quot;offspring&amp;quot;&amp;quot;&lt;/pre&gt;

  &lt;pre&gt;5,&amp;quot;ATUL&amp;quot;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;How can you “escape” the enclosing characters. Well I found the answer in another forum: &lt;/p&gt;

&lt;p&gt;&lt;em&gt;If two delimiter characters are encountered next to each other, a single occurrence of the delimiter character is used in the data value. For example, &amp;#39;DON&amp;#39;&amp;#39;T&amp;#39; is stored as DON&amp;#39;T. However, if the field consists of just two delimiter characters, its value is null.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;So just use something like:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&amp;#160;&lt;/em&gt;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;1,&amp;quot;XYZ IND&amp;quot;&lt;/pre&gt;

  &lt;pre class="alt"&gt;2,&amp;quot;ABC&amp;quot;&lt;/pre&gt;

  &lt;pre&gt;3,&amp;quot;XYZ ABC&amp;quot;&lt;/pre&gt;
  &lt;strong&gt;
    &lt;pre class="alt"&gt;4,&amp;quot;Your &amp;quot;&amp;quot;offspring&amp;quot;&amp;quot;&amp;quot;&lt;/pre&gt;
  &lt;/strong&gt;

  &lt;pre&gt;5,&amp;quot;ATUL&amp;quot;&lt;/pre&gt;

  &lt;p&gt;&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=2085" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/migration/default.aspx">migration</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Linc/default.aspx">Linc</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/EAE/default.aspx">EAE</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/DMSII/default.aspx">DMSII</category></item><item><title>Revisiting Windows 7 XP Mode</title><link>http://blogs.artinsoft.net/jose_aguilar_blog/archive/2010/02/04/revisiting-windows-7-xp-mode.aspx</link><pubDate>Thu, 04 Feb 2010 22:28:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:2084</guid><dc:creator>Jaguilar</dc:creator><slash:comments>0</slash:comments><description>Back when it was first announced I made a couple of posts about Windows 7 XP Mode. Now that I’ve been using almost every day for the past few months, I wanted to revisit the topic and write about my hands-on impressions. In this post I’ll show how applications that run under XP Mode integrate with the regular Windows 7 environment.

...(&lt;a href="http://blogs.artinsoft.net/jose_aguilar_blog/archive/2010/02/04/revisiting-windows-7-xp-mode.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=2084" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Virtualization/default.aspx">Virtualization</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Easy way to see the Explain Plan in Oracle</title><link>http://blogs.artinsoft.net/mrojas/archive/2010/02/03/easy-way-to-see-the-explain-plan-in-oracle.aspx</link><pubDate>Thu, 04 Feb 2010 00:07:32 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:2083</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Linc\EAE used profiles for their queries. Well the profile information is used by our migration tool to generate indexes.    &lt;br /&gt;In Java is easy to intercept all SQL statements used by the translated application and analyze them.&lt;/p&gt;  &lt;p&gt;To analyse how a query is executed you have to study its explain plan. For go &lt;a href="http://www.adp-gmbh.ch/ora/explainplan.html"&gt;here&lt;/a&gt; an excellent guide on EXPLAIN PLAN.&lt;/p&gt;  &lt;p&gt;After you read that page, you will find useful the following function, that will shorten the lines that you have to type to see the explain plan:&lt;/p&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;create&lt;/span&gt; &lt;span class="kwrd"&gt;OR&lt;/span&gt; REPLACE &lt;span class="kwrd"&gt;function&lt;/span&gt;  ShowPlan &lt;span class="kwrd"&gt;return&lt;/span&gt; sys_refcursor
  &lt;span class="kwrd"&gt;as&lt;/span&gt;
      c_test sys_refcursor;
&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;
  &lt;span class="kwrd"&gt;open&lt;/span&gt; c_test &lt;span class="kwrd"&gt;for&lt;/span&gt; &lt;span class="kwrd"&gt;select&lt;/span&gt; 
  substr (lpad(&lt;span class="str"&gt;&amp;#39; &amp;#39;&lt;/span&gt;, &lt;span class="kwrd"&gt;level&lt;/span&gt;-1) || &lt;span class="kwrd"&gt;operation&lt;/span&gt; || &lt;span class="str"&gt;&amp;#39; (&amp;#39;&lt;/span&gt; || options || &lt;span class="str"&gt;&amp;#39;)&amp;#39;&lt;/span&gt;,1,30 ) &amp;quot;&lt;span class="kwrd"&gt;Operation&lt;/span&gt;&amp;quot;, 
  object_name &amp;quot;&lt;span class="kwrd"&gt;Object&lt;/span&gt;&amp;quot;
  &lt;span class="kwrd"&gt;from&lt;/span&gt; 
  sys.plan_table$ &lt;span class="kwrd"&gt;start&lt;/span&gt; &lt;span class="kwrd"&gt;with&lt;/span&gt; id = 0 &lt;span class="kwrd"&gt;connect&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; &lt;span class="kwrd"&gt;prior&lt;/span&gt; id=parent_id;
  &lt;span class="kwrd"&gt;return&lt;/span&gt; c_test;
&lt;span class="kwrd"&gt;END&lt;/span&gt;;
&lt;span class="kwrd"&gt;SQL&lt;/span&gt;&amp;gt; &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;explain plan&lt;/span&gt; &lt;span class="kwrd"&gt;for&lt;/span&gt; &lt;span class="kwrd"&gt;select&lt;/span&gt; * &lt;span class="kwrd"&gt;from&lt;/span&gt; MY_TABLE&lt;/pre&gt;

&lt;span class="kwrd"&gt;SQL&lt;/span&gt;&amp;gt; &lt;span class="kwrd"&gt;variable&lt;/span&gt; rc refcursor
&lt;span class="kwrd"&gt;SQL&lt;/span&gt;&amp;gt; &lt;span class="kwrd"&gt;exec&lt;/span&gt; :rc := testfunc()

&lt;span class="kwrd"&gt;PL/SQL&lt;/span&gt; &lt;span class="kwrd"&gt;procedure&lt;/span&gt; successfully completed.

&lt;span class="kwrd"&gt;SQL&lt;/span&gt;&amp;gt; &lt;span class="kwrd"&gt;print&lt;/span&gt; rc&lt;/pre&gt;


&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Operation&lt;/span&gt;                      &lt;span class="kwrd"&gt;Object&lt;/span&gt;
----------------------------&lt;span class="rem"&gt;-- ------------------------------&lt;/span&gt;
&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;STATEMENT&lt;/span&gt; ()
 &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; ACCESS (&lt;span class="kwrd"&gt;FULL&lt;/span&gt;)           MY_TABLE&lt;/pre&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=2083" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/ORACLE/default.aspx">ORACLE</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/migration/default.aspx">migration</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Linc/default.aspx">Linc</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/EAE/default.aspx">EAE</category></item><item><title>Get Table Owner in Oracle</title><link>http://blogs.artinsoft.net/mrojas/archive/2010/02/03/get-table-owner-in-oracle.aspx</link><pubDate>Wed, 03 Feb 2010 23:40:29 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:2082</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;When we migrate from LINC/EAE to Oracle, the migration tool generates an schema an tables form the original ISPECS. &lt;br /&gt;I came across with the problem that I had been playing around with a test database and I didn’t know who was the owner of the table.&lt;/p&gt; &lt;p&gt;Well just as a reminder this is what is needed:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; owner, table_name, tablespace_name   &lt;span class="kwrd"&gt;from&lt;/span&gt; dba_tables   &lt;span class="kwrd"&gt;where&lt;/span&gt; table_name=&lt;span class="str"&gt;&amp;#39;YOUR_TABLE&amp;#39;&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;This will return something as:&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;OWNER&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TABLE_NAME&amp;nbsp; TABLESPACE_NAME&lt;br /&gt;------------------------------ ------------------------ ------------------------------&lt;br /&gt;THE_OWNER&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; MY_TABLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USERS
&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=2082" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/ORACLE/default.aspx">ORACLE</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/migration/default.aspx">migration</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/OWNER/default.aspx">OWNER</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Linc/default.aspx">Linc</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/EAE/default.aspx">EAE</category></item><item><title>Get Java Version for Oracle Stored Procedures</title><link>http://blogs.artinsoft.net/mrojas/archive/2010/02/01/get-java-version-for-oracle-stored-procedures.aspx</link><pubDate>Mon, 01 Feb 2010 17:17:16 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:2081</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;If you have to write stored procedures for oracle is important    &lt;br /&gt;to notice which Java version is supported by your Oracle Database,&lt;/p&gt;  &lt;p&gt;A common technique is create a JAVA stored procedure for that:&lt;/p&gt;  &lt;p&gt;1. Create a function with an ORACLE SQL statement like:&lt;/p&gt;  &lt;p&gt;&lt;font color="#000080" size="3" face="cour"&gt;CREATE OR REPLACE FUNCTION getJavaProperty(myprop IN VARCHAR2)     &lt;br /&gt;RETURN VARCHAR2 IS LANGUAGE JAVA      &lt;br /&gt;name ‘java.lang.System.getProperty(java.lang.String) return java.lang.String’;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;2. Once you created the function you can use it to get the version:&lt;/p&gt;  &lt;p&gt;&lt;font color="#000080" size="3" face="Courier New"&gt;SELECT getJavaProperty(‘java.version’) from dual;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;You can see in the attached version that for my Oracle Database 10.1.0.4.2 the Java version is 1.4.2_04 :)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.artinsoft.net/public_img/GetJavaVersionforOracleStoredProcedures_9EAF/image.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.artinsoft.net/public_img/GetJavaVersionforOracleStoredProcedures_9EAF/image_thumb.png" width="947" height="586" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=2081" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/ORACLE/default.aspx">ORACLE</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Stored/default.aspx">Stored</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Procedure/default.aspx">Procedure</category></item><item><title>File Previewers for Outlook</title><link>http://blogs.artinsoft.net/mrojas/archive/2010/01/26/file-previewers-for-outlook.aspx</link><pubDate>Tue, 26 Jan 2010 20:56:33 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:2080</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;As I developer I usually receive emails with .zip attachments and .xml attachments. When I’m looking for an old email I hate that I have to open the attachment just to see if it has the files I’m looking.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.artinsoft.net/public_img/FilePreviewersforOutlook_CFD4/image.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.artinsoft.net/public_img/FilePreviewersforOutlook_CFD4/image_thumb.png" width="644" height="334" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Why isn’t there a built-in preview functionality for .xml and .ZIP files?&lt;/p&gt;  &lt;p&gt;So I thought, I’m a developer I can build one. And I found an excellent article about the &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163487.aspx"&gt;File Previewers in Outlook 2007 and Windows 7&lt;/a&gt; by Stephen Toub.&lt;/p&gt;  &lt;p&gt;I just updated the project files to VS 2008 and removed the dependencies to VJ# replacing them by the SharpZipLib library.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.artinsoft.net/public_img/FilePreviewersforOutlook_CFD4/image_3.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.artinsoft.net/public_img/FilePreviewersforOutlook_CFD4/image_thumb_3.png" width="510" height="334" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;And it works well and does not require you to install anything else!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Below you can see an example of Zip File preview&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.artinsoft.net/public_img/FilePreviewersforOutlook_CFD4/image_4.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.artinsoft.net/public_img/FilePreviewersforOutlook_CFD4/image_thumb_4.png" width="361" height="372" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And and example of XML File Preview&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.artinsoft.net/public_img/FilePreviewersforOutlook_CFD4/image_5.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.artinsoft.net/public_img/FilePreviewersforOutlook_CFD4/image_thumb_5.png" width="495" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I think is an excellent article and I can know write my own previewers every time I need them.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Download the code from &lt;a href="http://blogs.artinsoft.net/public_img/FilePreviewersCodeVS2008NoJSharpCode.zip"&gt;CODE HERE&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Download the installer from &lt;a href="http://blogs.artinsoft.net/public_img/FilePreviewersCodeVS2008NoJSharp_Installer.zip"&gt;INSTALLER HERE&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=2080" width="1" height="1"&gt;</description></item><item><title>The VB.NET versus C# decision process</title><link>http://blogs.artinsoft.net/erick_nassar_blog/archive/2009/12/18/the-vb-net-versus-c-decision-process.aspx</link><pubDate>Fri, 18 Dec 2009 19:27:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:2072</guid><dc:creator>enassar</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;&amp;nbsp;A while ago I wrote about the decision that many people face when
starting to consider a migration from Visual Basic 6.0 to the .NET
platform: &lt;a href="http://blogs.artinsoft.net/erick_nassar_blog/archive/2008/07/15/to-vb-or-not-vb-that-is-the-question.php"&gt;choosing the target language, mainly between VB.NET and C#.&lt;/a&gt; Today I found a great post by &lt;a href="http://improvingsoftware.com/about-john-fuex/" target="_blank"&gt;John Fuex&lt;/a&gt;
on that subject, not inciting the war between both trenches but instead
describing the process he and his company went through to solve the &lt;a href="http://improvingsoftware.com/2009/04/19/a-managers-retrospective-on-the-c-versus-vbnet-decision/" target="_blank"&gt;C# versus .NET dilemma&lt;/a&gt;.
He basically used the following criteria to qualify each language:
Functionality, Learning Curve, Existing Code, Developer Preferences,
“Street Cred” (for both the developers and products), and Recruiting.
But in the end it reinforces the notion that there’s not a standard
solution, so the selection should always be made case by case.&lt;/p&gt;&lt;p&gt;You can read the whole post &lt;a href="http://improvingsoftware.com/2009/04/19/a-managers-retrospective-on-the-c-versus-vbnet-decision/" target="_blank"&gt;here&lt;/a&gt;. &lt;br /&gt;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=2072" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/erick_nassar_blog/archive/tags/Visual+Basic+to+.NET/default.aspx">Visual Basic to .NET</category></item><item><title>Get Exact Text Width C#</title><link>http://blogs.artinsoft.net/mrojas/archive/2009/12/15/get-exact-text-width-c.aspx</link><pubDate>Tue, 15 Dec 2009 19:13:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:2071</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;I was recently trying to get the exact width of a string. And I found
that the Graphics.MeasureString does not give an exact result.&lt;/p&gt;&lt;p&gt;I finally found &lt;b&gt;&lt;a href="http://blogs.artinsoft.net/Members/Pierre-Arnaud" id="ctl00_AboutAuthorRptr_ctl00_AboutAuthor_memberProfileLink"&gt;Pierre Arnaud&lt;/a&gt;&lt;/b&gt;&lt;a href="http://www.codeproject.com/KB/GDI-plus/measurestring.aspx"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.codeproject.com/KB/GDI-plus/measurestring.aspx"&gt; post in Code Project&lt;/a&gt;, which gave me a good explaination and solution of what was happening. &lt;/p&gt;&lt;p&gt;You can see in the image Pierre put in his post:&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.codeproject.com/KB/GDI-plus/measurestring/measurestring.gif" class="alignnone" alt="" height="39" width="366" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;That Graphics.measurestring will return a size that might be bigger
that the actual drawn size, this is due some GDI+ details that he
explains in that post.&lt;/p&gt;&lt;p&gt;I really like the second proposed solution:&lt;/p&gt;&lt;p&gt;static public int MeasureDisplayStringWidth(Graphics graphics, string text,Font font)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Drawing.StringFormat format&amp;nbsp; = new System.Drawing.StringFormat ();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Drawing.RectangleF&amp;nbsp;&amp;nbsp; rect&amp;nbsp;&amp;nbsp;&amp;nbsp; = new System.Drawing.RectangleF(0, 0,1000, 1000);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Drawing.CharacterRange[] ranges&amp;nbsp; =&amp;nbsp;{ new System.Drawing.CharacterRange(0,&amp;nbsp;text.Length) };&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Drawing.Region[]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; regions = new System.Drawing.Region[1];&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; format.SetMeasurableCharacterRanges (ranges);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; regions = graphics.MeasureCharacterRanges (text, font, rect, format);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; rect&amp;nbsp;&amp;nbsp;&amp;nbsp; = regions[0].GetBounds (graphics);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (int)(rect.Right + 1.0f);&lt;br /&gt;
}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=2071" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/migration/default.aspx">migration</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Vb6/default.aspx">Vb6</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Width/default.aspx">Width</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Text/default.aspx">Text</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Exact/default.aspx">Exact</category></item><item><title>ActiveX Server Migration to .NET</title><link>http://blogs.artinsoft.net/mrojas/archive/2009/12/14/activex-server-migration-to-net.aspx</link><pubDate>Mon, 14 Dec 2009 19:01:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:2070</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;In VB6 ActiveX-EXEs or ActiveX OLE Server where used for several
reasons. Sometimes it was performance (because it allowed you to run
your code in another process) and sometimes as way to share resources
between several applications, like connection information, database
connections, mainframe info, etc.&lt;/p&gt;&lt;p&gt;During migration some of this ActiveX-Exes can be migrated as simple
Assembly DLLs, but other require more attention. Specially if they have
global variables that hold state shared by several programs.&lt;/p&gt;&lt;p&gt;In that is your case what are your options then?&lt;/p&gt;&lt;h1&gt;1. Convert those ActiveX-Exes to Windows Services.&lt;/h1&gt;&lt;p&gt;This option is simple. You modify your migrated assembly to work as a Windows Service. The easier way to do that is:&lt;/p&gt;&lt;h3&gt;a) Start Microsoft Visual Studio 2005\2008&lt;/h3&gt;&lt;h3&gt;b) Go to File\New…\Project… and Select Windows Service&lt;/h3&gt;&lt;p&gt;That will generated code like:&lt;/p&gt;&lt;p&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;using&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;System;&lt;br /&gt;
&lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;using &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;System.Collections.Generic;&lt;br /&gt;
&lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;using &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;System.ComponentModel;&lt;br /&gt;
&lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;using &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;System.Data;&lt;br /&gt;
&lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;using &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;System.Diagnostics;&lt;br /&gt;
&lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;using &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;System.Linq;&lt;br /&gt;
&lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;using &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;System.ServiceProcess;&lt;br /&gt;
&lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;using &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;System.Text;&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;font color="#3366ff"&gt;&lt;span&gt;namespace &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;WindowsService1&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;
{&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;font color="#3366ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;partial&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;font color="#33cccc"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;Service1&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; : &lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;font color="#33cccc"&gt;ServiceBase&lt;/font&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;{&lt;br /&gt;
&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;font color="#3366ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; Service1()&amp;nbsp; &lt;/span&gt;{&amp;nbsp;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;InitializeComponent();&amp;nbsp;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;}&lt;br /&gt;
&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;protected&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;override&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt; OnStart(&lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;[] args)&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;br /&gt;
&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;protected&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;override&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt; OnStop()&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;}&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;c) Add a reference to the Remoting Assemblies: System.Runtime.Remoting;&lt;/h3&gt;
&lt;h3&gt;d) Modify the previous code:&lt;/h3&gt;
&lt;p&gt;Add two using statements like:&lt;/p&gt;



&lt;p&gt;&lt;font size="1" color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;using&lt;/span&gt;&lt;/span&gt; &lt;/font&gt;&lt;span style="font-size:x-small;"&gt;System.Runtime.Remoting.Channels.Http;&lt;br /&gt;
&lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;using &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;System.Runtime.Remoting.Channels;&lt;br /&gt;
&lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;using &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;System.Runtime.Remoting;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;Add a simple event log for tracing:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;private&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;static&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;font color="#33cccc"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;EventLog&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;&lt;font color="#33cccc"&gt; &lt;/font&gt;evt = &lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/font&gt;&lt;font color="#33cccc"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;EventLog&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;(&lt;/span&gt;&lt;font color="#ff0000"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;“Application”&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;);&lt;br /&gt;
&lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;private&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;static&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt; SVC_NAME = &lt;/span&gt;&lt;font color="#ff0000"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;“ActiveX Server Example Svc”&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;A&lt;span style="font-size:x-small;"&gt;nd modify the OnStart and OnStop methods to look like:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;protected&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;override&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt; OnStart(&lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;[] args)&lt;br /&gt;
{&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#33cccc"&gt;HttpChannel&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; chnl = &lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/font&gt;&lt;font color="#33cccc"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;HttpChannel&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;(1234);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;font color="#33cccc"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;ChannelServices&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;.RegisterChannel(chnl,&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;true&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/font&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;font color="#33cccc"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;RemotingConfiguration&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;.RegisterWellKnownServiceType(&lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;typeof&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;(&lt;/span&gt;&lt;font color="#33cccc"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;MyClass&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;), &lt;/span&gt;&lt;font color="#ff0000"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;“MyClass.soap”&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;, &lt;/span&gt;&lt;font color="#33cccc"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;WellKnownObjectMode&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;.Singleton);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; evt.WriteEntry(SVC_NAME + ” Started”);&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;br /&gt;
}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;protected&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;override&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt; OnStop() &lt;/span&gt;{ evt.WriteEntry(SVC_NAME +&lt;font color="#ff0000"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;” Stoppped”&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;); }&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;Also make sure that MyClass extends MarshalByRefClass&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;2. Convert those ActiveX-Exes using the Artinsoft ActiveX migration helpers.&lt;/h1&gt;
&lt;p&gt;&amp;nbsp;Sometimes, you need your migrated application to replicate some of
the original ActiveX EXE \OLE DLL VB6 characteristics. For example you
need your ActiveX-EXE to start just when the first instance is created
and to resemble the VB6 logic for Process creation\destruction.&lt;/p&gt;
&lt;p&gt;For that purpose Artinsoft has created some helpers that our
migration tool is able to automatically use in the generated code if it
detects that this functionality is needed.&lt;/p&gt;
&lt;p&gt;The code will then be changed from:&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Dim myInstance As New MyProject.MyClass&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;To the following Helper method:&lt;/p&gt;
&lt;p&gt;&lt;i&gt;myInstance&lt;/i&gt;&lt;i&gt; = &lt;/i&gt;&lt;i&gt;MyProjectFactory&lt;/i&gt;&lt;i&gt;.Create&amp;lt;&lt;/i&gt;&lt;i&gt; MyProject.&lt;/i&gt;&lt;i&gt;MyClass&lt;/i&gt;&lt;i&gt;&amp;gt;(&lt;/i&gt;&lt;i&gt;myInstance&lt;/i&gt;&lt;i&gt;);&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;And destroy calls can be changed to the following Helper method:&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;i&gt;myInstance&lt;/i&gt;&lt;i&gt;= &lt;/i&gt;&lt;i&gt;MyProjectFactory&lt;/i&gt;&lt;i&gt;.Dispose&amp;lt;&lt;/i&gt;&lt;i&gt;MyProject.&lt;/i&gt;&lt;i&gt;MyClass&lt;/i&gt;&lt;i&gt; &amp;gt;(&lt;/i&gt;&lt;i&gt; myInstance&lt;/i&gt;&lt;i&gt;);&lt;/i&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;The migration tool will modify your ActiveX-EXEs or OLE Servers to
be Windows EXE and the helper will then locate the assembly that
contains the desired Class, create an instance and initilize a Remoting
channel to the desired classes. Settings as SingleUse and MultiUse are
also taken care by the helpers.&lt;/p&gt;
&lt;h1&gt;3. Other possible alternatives are using WFC and COM+ that I will comment in another post.&lt;/h1&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=2070" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/ActiveX/default.aspx">ActiveX</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/migration/default.aspx">migration</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VB.NET/default.aspx">VB.NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Vb6/default.aspx">Vb6</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/global+variables/default.aspx">global variables</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Out-of-process/default.aspx">Out-of-process</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Server/default.aspx">Server</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/OLE+Server/default.aspx">OLE Server</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/OLE/default.aspx">OLE</category></item><item><title>Return argument has an invalid type</title><link>http://blogs.artinsoft.net/mrojas/archive/2009/12/10/return-argument-has-an-invalid-type.aspx</link><pubDate>Thu, 10 Dec 2009 18:39:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:2068</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;When you develop applications with remoting, or in some COM + Remoting
scenarios, you could start founding very interesting exceptions.&lt;/p&gt;&lt;p&gt;We had a very unconfortable one. We had an ActiveX that is used in an
intranet&amp;nbsp;Web Page, that uses remoting to instanciate some classes in
the local network.&lt;/p&gt;&lt;p&gt;When we runned outside of the IE, everything seem to work, but running in IE it produced an exception like: &lt;/p&gt;&lt;p&gt;&lt;font size="2" color="#ff0000"&gt;&lt;code&gt;Error : Return argument has an invalid type.&lt;br /&gt;
Type&amp;nbsp; : System.InvalidCastException&lt;br /&gt;
Source: mscorlib&lt;br /&gt;
Source: at System.Runtime.Remoting.Proxies.RealProxy.ValidateReturnArg(Object arg, Type paramType)&lt;br /&gt;
at System.Runtime.Remoting.Proxies.RealProxy.PropagateOutParameters(IMessage msg, Object[] outArgs, Object returnValue)&lt;br /&gt;
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)&lt;br /&gt;
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&amp;amp; msgData, Int32 type)&lt;/code&gt;&lt;/font&gt; &lt;/p&gt;&lt;p&gt;Why??? Well what happens is simple, it is having an &lt;span style="font-weight:bold;"&gt;assembly resolution problem&lt;/span&gt;&lt;b&gt;, &lt;/b&gt;it is not being able to resolve the type.&lt;/p&gt;&lt;p&gt;We solve the problem adding something like:&lt;/p&gt;
&lt;p&gt;1. Find a place in your code to add an event like this (it could be in the Main of your program for example):&lt;/p&gt;
&lt;div&gt;&lt;font color="#33cccc"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;AppDomain&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;.CurrentDomain.AssemblyResolve += &lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;new&lt;/span&gt; &lt;/span&gt;&lt;/font&gt;&lt;font color="#33cccc"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;ResolveEventHandler&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;(CurrentDomain_AssemblyResolve);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:x-small;"&gt;&lt;font size="2"&gt;2. Add a handler like this&lt;/font&gt;:&lt;/span&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;static&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;&lt;font color="#3366ff"&gt;&lt;span&gt; &lt;/span&gt;&lt;/font&gt;System.Reflection.&lt;/span&gt;&lt;font color="#33cccc"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;Assembly&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;&lt;font color="#33cccc"&gt;&lt;span&gt; &lt;/span&gt;&lt;/font&gt;CurrentDomain_AssemblyResolve(&lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;object&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;&lt;font color="#3366ff"&gt;&lt;span&gt; &lt;/span&gt;&lt;/font&gt;sender, &lt;/span&gt;&lt;font color="#33cccc"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;ResolveEventArgs &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;args)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;System.Reflection.&lt;/span&gt;&lt;/span&gt;&lt;font color="#33cccc"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;Assembly&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;&lt;font color="#33cccc"&gt;&lt;span&gt; &lt;/span&gt;&lt;/font&gt;assembly = &lt;/span&gt;&lt;font color="#3366ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;assembly = System.Reflection.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;Assembly&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Load(&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;System.Reflection.&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;AssemblyName&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(args.Name));&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;(&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;Exception &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;ex)&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;System.Diagnostics.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;Trace&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.WriteLine(&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Format(&lt;/span&gt;&lt;font color="#993300"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;“Problem with resolution of {0} : {1} {2}”&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:x-small;"&gt;, args.Name, ex.Message, ex.StackTrace));&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;font color="#0000ff"&gt;return &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;a&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;ssembly;&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;span style="font-size:x-small;"&gt;&lt;font size="2"&gt;Well, this worked for us, and I hope that helps you out&lt;/font&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=2068" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/COM/default.aspx">COM</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Exception/default.aspx">Exception</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/System.InvalidCastException/default.aspx">System.InvalidCastException</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Remoting/default.aspx">Remoting</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Visual+Basic+to+.NET/default.aspx">Visual Basic to .NET</category></item><item><title>Visual Basic 6 and Windows 7: Alternatives for Application Compatibility Webcast Recording Available</title><link>http://blogs.artinsoft.net/jose_aguilar_blog/archive/2009/10/19/visual-basic-6-and-windows-7-alternatives-for-application-compatibility-webcast-recording-available.aspx</link><pubDate>Mon, 19 Oct 2009 18:29:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:2030</guid><dc:creator>Jaguilar</dc:creator><slash:comments>0</slash:comments><description>The recording of last week’s webcast I did on compatibility options for Windows 7 is now online. It covers compatibility options available for Windows 7 (virtualization, Remediation) while focusing on the benefits of using automated migration tools.
...(&lt;a href="http://blogs.artinsoft.net/jose_aguilar_blog/archive/2009/10/19/visual-basic-6-and-windows-7-alternatives-for-application-compatibility-webcast-recording-available.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=2030" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Visual+Basic+Upgrade+Companion/default.aspx">Visual Basic Upgrade Companion</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Why+Migrate_3F00_/default.aspx">Why Migrate?</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Webcast/default.aspx">Webcast</category></item></channel></rss>