<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Programming on ManuSoft</title><link>http://www.manusoft.com/topics/programming/</link><description>Recent content in Programming on ManuSoft</description><generator>Hugo</generator><language>en-us</language><copyright>1991–2026</copyright><lastBuildDate>Fri, 04 Nov 2016 15:30:23 +0000</lastBuildDate><atom:link href="http://www.manusoft.com/topics/programming/index.xml" rel="self" type="application/rss+xml"/><item><title>Microsoft Visual C/C++ Environment</title><link>http://www.manusoft.com/develop/objectarx/msvc-environment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://www.manusoft.com/develop/objectarx/msvc-environment/</guid><description>Setting up MSVC for ObjectARX development.</description></item><item><title>ADS / ObjectARX</title><link>http://www.manusoft.com/resources/freebies/arx/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://www.manusoft.com/resources/freebies/arx/</guid><description/></item><item><title>Using VC Build Hook to Target Multiple AutoCAD Versions</title><link>http://www.manusoft.com/develop/objectarx/vc-build-hook/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://www.manusoft.com/develop/objectarx/vc-build-hook/</guid><description>Target multiple AutoCAD versions from one Visual Studio tree.</description></item><item><title>Demand Loading a LISP File</title><link>http://www.manusoft.com/develop/objectarx/demand-load-vlx/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://www.manusoft.com/develop/objectarx/demand-load-vlx/</guid><description>Demand-load a LISP or VLX file from an ObjectARX stub of the same name.</description></item><item><title>Using VC 7 to Build For AutoCAD 2000/2002</title><link>http://www.manusoft.com/develop/objectarx/vc7-arx-2000/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://www.manusoft.com/develop/objectarx/vc7-arx-2000/</guid><description>Building ObjectARX for AutoCAD 2000/2002 with Visual C++ 7.</description></item><item><title>Enabling IntelliSense and ObjectARX Class Browsing</title><link>http://www.manusoft.com/develop/objectarx/browse-arx/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://www.manusoft.com/develop/objectarx/browse-arx/</guid><description>Enable IntelliSense and browse ObjectARX classes in Visual Studio.</description></item><item><title>Using VC 7.1 to Build for AutoCAD 2000/2002/2004</title><link>http://www.manusoft.com/develop/objectarx/vc71-arx-2004/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://www.manusoft.com/develop/objectarx/vc71-arx-2004/</guid><description>Building ObjectARX for AutoCAD 2000–2004 with Visual C++ 7.1.</description></item><item><title>LspLoad updated for BricsCAD 17 and ZWCAD 2017</title><link>http://www.manusoft.com/archive/blog/lspload-updated-bcad17-zwcad2017/</link><pubDate>Fri, 04 Nov 2016 15:30:23 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/lspload-updated-bcad17-zwcad2017/</guid><description>&lt;p&gt;I have updated the automatic lisp loader modules (LspLoad.zip on my &lt;a href="http://www.manusoft.com/software/freebies/arx.html" title="ADS / ObjectARX Freebies"&gt;freebies page&lt;/a&gt;) to support BricsCAD V17 and ZWCAD 2017. Note that the source code for LspLoad is &lt;a href="http://www.manusoft.com/resources/arxtips/demandloadvlx.html" title="Demand Loading a LISP File"&gt;also available&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Ch-Ch-Ch-Ch-Changes</title><link>http://www.manusoft.com/archive/blog/ch-ch-ch-ch-changes/</link><pubDate>Mon, 16 Mar 2015 01:59:57 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/ch-ch-ch-ch-changes/</guid><description>&lt;p&gt;Although my blog has become relatively stagnant, the rest of my life has been changing &amp;#8212; and there are even bigger changes ahead.&lt;/p&gt;
&lt;p&gt;My children have been growing into adulthood one by one, and my parenting time has been shrinking as a result. To take up the slack, I bought a bike a few years ago and started riding it on the many local bike trails. Initially cycling was a way to get healthy and enjoy the outdoors, but it has turned into much more. Riding a bike is great exercise, but it&amp;#8217;s also a fantastic social activity when you do it with friends, and I have made many new friends in the very large and growing cycling community here in Ohio.&lt;/p&gt;</description></item><item><title>QuirkyPolyline updated for Bricscad and ZWCAD+</title><link>http://www.manusoft.com/archive/blog/quirkypolyline-updated-for-bricscad-and-zwcad/</link><pubDate>Tue, 09 Dec 2014 04:39:50 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/quirkypolyline-updated-for-bricscad-and-zwcad/</guid><description>&lt;div class="interactive_right" style="float:right;padding: 0 0 10px 10px"&gt;&lt;div class="button_holder_right"&gt;&lt;g:plusone annotation="bubble" href="http://otb.manusoft.com/2014/12/quirkypolyline-updated-for-bricscad-and-zwcad.htm" size=""&gt;&lt;/g:plusone&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="float: right;margin: 9px;"&gt;
&lt;/div&gt;&lt;p&gt;I’ve updated &lt;a href="http://otb.manusoft.com/2013/01/quirkypolyline-exposing-foolish-programmers.htm" target="_blank"&gt;QuirkyPolyline&lt;/a&gt; and added support for Bricscad 14 – 15 and ZWCAD+ 2014 – 2015. The new QuirkyPolyline download is available on the &lt;a href="http://www.manusoft.com/software/freebies/arx.html" target="_blank"&gt;ObjectARX freebies page&lt;/a&gt;.&lt;/p&gt;
&lt;div id="simple_socialmedia"&gt;&lt;ul class="ssm_row"&gt;&lt;li class="sharetext"&gt;Share This&lt;/li&gt;&lt;li class="twitter"&gt;&lt;a href="http://twitter.com/share?url=http://otb.manusoft.com/2014/12/quirkypolyline-updated-for-bricscad-and-zwcad.htm&amp;amp;text=QuirkyPolyline updated for Bricscad and ZWCAD+&amp;amp;via=owenwengerd" target="_blank"&gt;Tweet&lt;/a&gt;&lt;/li&gt;&lt;li class="facebook"&gt;&lt;a href="http://www.facebook.com/sharer.php?u=http://otb.manusoft.com/2014/12/quirkypolyline-updated-for-bricscad-and-zwcad.htm&amp;amp;t=QuirkyPolyline updated for Bricscad and ZWCAD+" rel="nofollow" target="_blank" title="Share on Facebook"&gt;Facebook&lt;/a&gt;&lt;/li&gt;&lt;li class="linkedin"&gt;&lt;a href="http://www.linkedin.com/shareArticle?mini=true&amp;amp;url=http://otb.manusoft.com/2014/12/quirkypolyline-updated-for-bricscad-and-zwcad.htm&amp;amp;title=QuirkyPolyline updated for Bricscad and ZWCAD+&amp;amp;source=Outside The Box" rel="nofollow" target="_blank" title="Share on LinkedIn"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;&lt;li class="tumblr"&gt;&lt;a href="http://www.tumblr.com/share/link?url=http%3A%2F%2Fotb.manusoft.com%2F2014%2F12%2Fquirkypolyline-updated-for-bricscad-and-zwcad.htm&amp;amp;name=Outside+The+Box&amp;amp;description=QuirkyPolyline+updated+for+Bricscad+and+ZWCAD%2B" rel="nofollow" target="_blank" title="Share on Tumblr"&gt;Tumblr&lt;/a&gt;&lt;/li&gt;&lt;li class="stumble"&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http://otb.manusoft.com/2014/12/quirkypolyline-updated-for-bricscad-and-zwcad.htm" rel="nofollow" target="_blank" title="Share on StumbleUpon"&gt;Stumble&lt;/a&gt;&lt;/li&gt;&lt;li class="digg"&gt;&lt;a href="http://www.digg.com/submit?phase=2&amp;amp;url=http://otb.manusoft.com/2014/12/quirkypolyline-updated-for-bricscad-and-zwcad.htm" rel="nofollow" target="_blank" title="Share on Digg"&gt;Digg&lt;/a&gt;&lt;/li&gt;&lt;li class="delicious"&gt;&lt;a href="http://del.icio.us/post?url=http://otb.manusoft.com/2014/12/quirkypolyline-updated-for-bricscad-and-zwcad.htm&amp;amp;title=INSERT_TITLE" rel="nofollow" target="_blank" title="Share on Delicious"&gt;Delicious&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description></item><item><title>How to fix IntelliSense errors in Visual Studio</title><link>http://www.manusoft.com/archive/blog/how-to-fix-intellisense-errors/</link><pubDate>Thu, 20 Nov 2014 22:39:40 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/how-to-fix-intellisense-errors/</guid><description>&lt;p&gt;New Visual Studio C/C++ users sometimes get tripped up by IntelliSense errors, so today I&amp;#8217;ve decided to share the secret, undocumented solution: &lt;em&gt;just turn them off!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/vstudio/hcw1s69b(v=vs.100).aspx" target="_blank"&gt;IntelliSense&lt;/a&gt; is a nice user interface feature when it works, but it has nothing whatever to do with building and running your C/C++ code. IntelliSense errors do not equal compiler errors, and trying to &amp;#8220;fix&amp;#8221; them is fruitless.&lt;/p&gt;</description></item><item><title>Writing a Custom Debugger on Windows</title><link>http://www.manusoft.com/archive/blog/writing-a-custom-debugger-on-windows/</link><pubDate>Wed, 13 Aug 2014 05:22:38 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/writing-a-custom-debugger-on-windows/</guid><description>&lt;p&gt;Recently I had to debug an intermittent access violation exception in one of my AutoCAD plug-ins. I needed to get the exception while the debugger was attached so I could break the process and analyze the state of memory before AutoCAD&amp;#8217;s global exception handler got control. Unfortunately, sometimes it took several hundred runs before the exception occurred.&lt;/p&gt;</description></item><item><title>AutoCAD 2015: Managing the Application Manager</title><link>http://www.manusoft.com/archive/blog/autocad-2015-managing-the-application-manager/</link><pubDate>Wed, 26 Mar 2014 21:49:04 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/autocad-2015-managing-the-application-manager/</guid><description>&lt;p&gt;AutoCAD 2015 includes a new feature called &lt;a href="http://help.autodesk.com/view/INSTALL_LICENSE/2015/ENU/?guid=GUID-448769B1-CA69-4566-9EAF-D97DBD85AF88" target="_blank"&gt;Application Manager&lt;/a&gt;. I&amp;#8217;m sure it serves a lofty purpose, but it comes across a lot like the slimy Norton and Adobe updaters that are really just Trojans in disguise. It gets installed by default, with no option to prevent installation. To Autodesk&amp;#8217;s credit, they do provide instructions for &lt;a href="http://help.autodesk.com/view/INSTALL_LICENSE/2015/ENU/?guid=GUID-FAB40CCD-0A6C-4E55-A994-0D237CD954A2" target="_blank"&gt;preventing installation of Application Manager&lt;/a&gt;, and instructions for &lt;a href="http://help.autodesk.com/view/INSTALL_LICENSE/2015/ENU/?guid=GUID-D2340FA4-3A0C-4B7C-9558-EB50F6402472" target="_blank"&gt;removing it after the fact&lt;/a&gt;. Uninstalling requires several additional clicks, as if they really, really want you to think twice before taking such a drastic measure.&lt;/p&gt;</description></item><item><title>Building a commercial grade lisp plugin installer in 5 easy steps</title><link>http://www.manusoft.com/archive/blog/building-a-commercial-grade-lisp-plugin-installer-in-5-easy-steps/</link><pubDate>Tue, 18 Feb 2014 01:36:34 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/building-a-commercial-grade-lisp-plugin-installer-in-5-easy-steps/</guid><description>&lt;p&gt;Rumors about the death of AutoLISP have been floating around for many years, but fear not, those rumors are greatly exaggerated. Bricscad and ZWCAD both have excellent support for lisp plugins, so well-written lisp code is truly cross-platform and enjoys a large and growing audience. Unlike other languages, the vast majority of lisp code works unmodified on any hardware architecture, in any version of Windows, and inside any host application that supports it, including AutoCAD versions released more than a decade ago. On top of that, &lt;a href="http://www.opendcl.com" target="_blank"&gt;OpenDCL&lt;/a&gt; gives lisp developers the power of a modern event-driven user interface that can put their lisp plugins on the same playing field as plugins written in any other language. This is a powerful combination, and given lisp&amp;rsquo;s low entry cost, it is not surprising to see lisp continuing to enjoy strong support in the developer community.&lt;/p&gt;</description></item><item><title>Don't catch what you can't handle</title><link>http://www.manusoft.com/archive/blog/dont-catch-what-you-cant-handle/</link><pubDate>Fri, 07 Feb 2014 00:10:41 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/dont-catch-what-you-cant-handle/</guid><description>&lt;p&gt;One of the cardinal rules of C++ exception handling is &lt;em&gt;&amp;ldquo;don&amp;rsquo;t catch what you can&amp;rsquo;t handle&amp;rdquo;&lt;/em&gt;. Of course there are always, er, exceptions to the rule, but the basic principle always holds. The consequences of violating the rule are less severe in the .NET world, but even there it&amp;rsquo;s a good rule of thumb.&lt;/p&gt;</description></item><item><title>LspLoad Updated for AutoCAD 2014 and Bricscad 13 64-bit</title><link>http://www.manusoft.com/archive/blog/lspload-updated-for-autocad-2014-and-bricscad-13-64-bit/</link><pubDate>Sat, 13 Apr 2013 20:58:40 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/lspload-updated-for-autocad-2014-and-bricscad-13-64-bit/</guid><description>&lt;p&gt;The &lt;a href="http://otb.manusoft.com/2009/12/automatic-lisp-loading.htm"&gt;automatic lisp loader modules&lt;/a&gt; (LspLoad.zip on my &lt;a href="http://www.manusoft.com/software/freebies/arx.html"&gt;freebies page&lt;/a&gt;) have been updated to add support for AutoCAD 2014 and Bricscad 13 64-bit. The modules are now digitally signed so that AutoCAD 2014 loads them quietly.&lt;/p&gt;</description></item><item><title>C++ function declaration tips</title><link>http://www.manusoft.com/archive/blog/c-function-declaration-tips/</link><pubDate>Wed, 06 Feb 2013 22:59:29 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/c-function-declaration-tips/</guid><description>&lt;p&gt;Creating and calling functions is one of the most fundamental tasks in C++ programming. The function declaration serves as the primary description of a function&amp;rsquo;s interface - or &lt;em&gt;contract&lt;/em&gt; - with callers, thereby making it the most important piece of code documentation. A good function declaration should convey as much information as possible. I&amp;rsquo;m sure an entire book could be written on the topic of function interface design, but I&amp;rsquo;ll just touch briefly on a few factors to consider when designing a function&amp;rsquo;s interface.&lt;/p&gt;</description></item><item><title>Using /delayload to specify dependent DLL path</title><link>http://www.manusoft.com/archive/blog/using-delayload-to-specify-dependent-dll-path/</link><pubDate>Sat, 26 Jan 2013 01:03:48 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/using-delayload-to-specify-dependent-dll-path/</guid><description>&lt;p&gt;Let&amp;rsquo;s say you have an ObjectARX module with an implicit dependency on another DLL. Your installer puts both your ARX module and the dependent DLL into a private application folder. Windows must be able to resolve the implicit DLL dependency at load time, otherwise it will fail to load your ARX module. Alas, Windows will not automatically search for the dependent DLL in your application folder, even though your ARX module is located there. Therefore your ARX module won&amp;rsquo;t load because the dependent DLL cannot be resolved.&lt;/p&gt;</description></item><item><title>QuirkyPolyline: exposing foolish programmers</title><link>http://www.manusoft.com/archive/blog/quirkypolyline-exposing-foolish-programmers/</link><pubDate>Wed, 09 Jan 2013 02:38:45 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/quirkypolyline-exposing-foolish-programmers/</guid><description>&lt;p&gt;In AutoCAD, the &lt;a href="http://docs.autodesk.com/ACDMAC/2012/ENU/ObjectARX%20Reference/AcDbCurve.html" target="_blank"&gt;AcDbCurve class&lt;/a&gt; defines a general parametrized curve. On a parametrized curve, points in space are mapped to real numbers (parameters) by an arbitrary function &lt;em&gt;F(p)&lt;/em&gt; for values of &lt;em&gt;p&lt;/em&gt; from the curve start parameter to the curve end parameter. Defining a curve this way simplifies working with complex 3D curves because one can work in the curve&amp;rsquo;s one dimensional &amp;ldquo;parameter space&amp;rdquo; instead of the more complex three dimensional cartesian space.&lt;/p&gt;</description></item><item><title>Polymorphic bit flags in C++</title><link>http://www.manusoft.com/archive/blog/polymorphic-bit-flags-in-c/</link><pubDate>Wed, 19 Dec 2012 11:55:45 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/polymorphic-bit-flags-in-c/</guid><description>&lt;p&gt;I often encounter cases in ObjectARX programming where numerous boolean flags need to be persisted as part of an AutoCAD database object. For filing and for passing around to other functions, it&amp;rsquo;s most efficient to package those bit flags into a single unsigned integer. Below is an example that demonstrates how to use a union inside a containing class that can be simultaneously used as either a single unsigned integer or as individual booleans.&lt;/p&gt;</description></item><item><title>Checking function return values</title><link>http://www.manusoft.com/archive/blog/checking-function-return-values/</link><pubDate>Thu, 30 Aug 2012 15:48:36 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/checking-function-return-values/</guid><description>&lt;p&gt;A lot of you are guilty of not checking return values from API function calls. I&amp;rsquo;ll bet you have a good excuse, like &lt;em&gt;&amp;ldquo;it&amp;rsquo;s a lot of extra typing for no reason&amp;rdquo;&lt;/em&gt;, or &lt;em&gt;&amp;ldquo;that function should never return an error code&amp;rdquo;&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Registering an ARX/BRX module as a COM server</title><link>http://www.manusoft.com/archive/blog/registering-an-arxbrx-module-as-a-com-server/</link><pubDate>Tue, 11 Oct 2011 00:18:41 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/registering-an-arxbrx-module-as-a-com-server/</guid><description>&lt;p&gt;If you&amp;rsquo;re developing ARX modules that need to be registered as a COM server, you&amp;rsquo;re faced with some decisions about how to register them. In the old days before anyone cared about user permissions, registration could be safely accomplished at runtime, even via AutoLISP. Unfortunately runtime COM server registration just doesn&amp;rsquo;t work reliably any more under limited user accounts, not to mention registry redirection on 64-bit platforms. There is only one reliable way to register COM servers, and that&amp;rsquo;s doing it at install time under elevated privileges.&lt;/p&gt;</description></item><item><title>OpenDCL 6</title><link>http://www.manusoft.com/archive/blog/opendcl-6/</link><pubDate>Fri, 05 Aug 2011 14:32:27 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/opendcl-6/</guid><description>&lt;p&gt;You may not have noticed, but AutoLISP is still alive and kicking. This is evidenced by the growing community of developers and hobbyist programmers using the latest release of &lt;a title="OpenDCL" href="http://www.opendcl.com" target="_blank"&gt;OpenDCL&lt;/a&gt;, the free graphical user interface library for AutoLISP applications. If you&amp;rsquo;re not familiar with OpenDCL, check out the &lt;a title="OpenDCL 6 Released" href="http://opendcl.com/wordpress/?p=158" target="_blank"&gt;newly released OpenDCL 6&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>The MFC Balloon</title><link>http://www.manusoft.com/archive/blog/the-mfc-balloon/</link><pubDate>Fri, 15 Apr 2011 17:24:46 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/the-mfc-balloon/</guid><description>&lt;p&gt;The MFC version that ships with Visual Studio 2010 is known to cause &lt;a href="https://connect.microsoft.com/VisualStudio/feedback/details/504714/statically-linked-mfc-applications-are-massive"&gt;major explosions in file size&lt;/a&gt; when you link statically. To avoid that problem, I use the Visual Studio 2008 build tools for such cases. I recently got quite a surprise when I rebuilt one such MFC application and discovered that the executable had ballooned from 400kb to 2MB in the space of one week despite only very minor changes.&lt;/p&gt;</description></item><item><title>BRX on Linux: Getting Started</title><link>http://www.manusoft.com/archive/blog/brx-on-linux-getting-started/</link><pubDate>Sun, 10 Apr 2011 11:19:35 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/brx-on-linux-getting-started/</guid><description>&lt;p&gt;When I heard that Bricsys had &lt;a href="http://www.bricsys.com/common/news.jsp?item=402"&gt;shipped Bricscad for Linux&lt;/a&gt;, I was anxious to get to work on supporting the Linux platform. The first order of business was getting familiar with Linux. For that, I chose &lt;a href="http://releases.ubuntu.com/10.10/"&gt;Ubuntu 10.10&lt;/a&gt; 32-bit running on a &lt;a href="http://www.vmware.com/workstation"&gt;VMWare Workstation 7.1&lt;/a&gt; virtual machine hosted on my Windows 7 64-bit workstation.&lt;/p&gt;</description></item><item><title>ObjectARX Wizard for Visual Studio 2010</title><link>http://www.manusoft.com/archive/blog/objectarx-wizard-for-visual-studio-2010/</link><pubDate>Fri, 01 Apr 2011 20:04:33 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/objectarx-wizard-for-visual-studio-2010/</guid><description>&lt;p&gt;If you&amp;rsquo;re an ObjectARX programmer, you may still be using Visual Studio 2008 because you&amp;rsquo;ve been told that you must. It&amp;rsquo;s true that you need Visual Studio 2008 installed to compile native ObjectARX code, but with &lt;a href="http://daffodil.codeplex.com"&gt;Daffodil&lt;/a&gt; you can &lt;a href="http://otb.manusoft.com/2010/10/visual-studio-2010-native-multi-targeting.htm"&gt;do all your work in the Visual Studio 2010 IDE&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Simplifying the problem: plain vanilla configuration</title><link>http://www.manusoft.com/archive/blog/simplifying-the-problem-plain-vanilla-configuration/</link><pubDate>Sat, 26 Feb 2011 14:21:32 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/simplifying-the-problem-plain-vanilla-configuration/</guid><description>&lt;p&gt;One of the stages in &lt;a href="http://otb.manusoft.com/2011/02/the-art-of-simplifying-the-problem.htm"&gt;simplifying an AutoCAD software problem&lt;/a&gt; is to rule out (or in) third party add-ons as the cause. To do that, you&amp;rsquo;ll need a &amp;ldquo;plain vanilla&amp;rdquo; test bed configuration that consists of only the out-of-the-box components with no add-ons loaded.&lt;/p&gt;</description></item><item><title>Simplifying the problem: divide and conquer</title><link>http://www.manusoft.com/archive/blog/simplifying-the-problem-divide-and-conquer/</link><pubDate>Fri, 25 Feb 2011 14:08:51 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/simplifying-the-problem-divide-and-conquer/</guid><description>&lt;p&gt;When a customer reports a &lt;a href="http://otb.manusoft.com/2011/02/is-it-the-drawing.htm"&gt;drawing-specific issue&lt;/a&gt;, the next stage in &lt;a href="http://otb.manusoft.com/2011/02/the-art-of-simplifying-the-problem.htm"&gt;simplifying the problem&lt;/a&gt; is to eliminate all drawing content that has no bearing on the problem. Unless the drawing object that causes the problem is obvious and can be immediately ascertained, I use the &lt;a href="http://en.wikipedia.org/wiki/Divide_and_conquer_algorithm"&gt;divide-and-conquer&lt;/a&gt; method to zero in on the cause.&lt;/p&gt;</description></item><item><title>The art of simplifying the problem</title><link>http://www.manusoft.com/archive/blog/the-art-of-simplifying-the-problem/</link><pubDate>Wed, 23 Feb 2011 14:06:57 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/the-art-of-simplifying-the-problem/</guid><description>&lt;p&gt;One of the most important skills in resolving technical problems is not problem solving, but problem definition. Stripping a problem down to its essence often makes the solution obvious. I think this is generally true, but especially true in my experience with software tech support and tracking down software bugs.&lt;/p&gt;</description></item><item><title>What's the diff?</title><link>http://www.manusoft.com/archive/blog/whats-the-diff/</link><pubDate>Wed, 29 Dec 2010 16:32:31 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/whats-the-diff/</guid><description>&lt;p&gt;One of the required tools in a programmer&amp;rsquo;s toolbox is a tool for comparing files. File comparison utilities have come a long way since the original Unix diff command, but this genre of utilities is still referred to as &lt;a href="http://en.wikipedia.org/wiki/Diff"&gt;diff&lt;/a&gt; tools. For Windows, I use an open source diff utility called &lt;a href="https://sourceforge.net/projects/winmerge/"&gt;WinMerge&lt;/a&gt;. WinMerge includes a shell extension that makes it easy to use from within Windows Explorer.&lt;/p&gt;</description></item><item><title>Debugging heap corruption with PageHeap</title><link>http://www.manusoft.com/archive/blog/debugging-heap-corruption-with-pageheap/</link><pubDate>Wed, 15 Dec 2010 12:58:33 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/debugging-heap-corruption-with-pageheap/</guid><description>&lt;p&gt;Heap corruption bugs in C++ code can present some difficult debugging challenges. Often the actual corruption goes unnoticed until some apparently random point in the future when the corrupt memory is accessed by unrelated code. In such cases, it&amp;rsquo;s almost impossible to infer the location of the bug using typical debugging tools.&lt;/p&gt;</description></item><item><title>Visual Studio 2010 Migration Post Mortem</title><link>http://www.manusoft.com/archive/blog/visual-studio-2010-migration-post-mortem/</link><pubDate>Mon, 18 Oct 2010 23:49:22 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/visual-studio-2010-migration-post-mortem/</guid><description>&lt;p&gt;I have more or less completed the task of migrating my internal projects to Visual Studio 2010. Native C++ programmers are pretty low on the totem pole of programming coolness these days, but Microsoft did throw us a few bones. At this point I have to say I&amp;rsquo;m ambivalent overall with VS 2010, but I really like some of the architectural changes and I&amp;rsquo;m excited about the future.&lt;/p&gt;</description></item><item><title>Visual Studio 2010 Native Multi-Targeting</title><link>http://www.manusoft.com/archive/blog/visual-studio-2010-native-multi-targeting/</link><pubDate>Thu, 07 Oct 2010 02:16:19 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/visual-studio-2010-native-multi-targeting/</guid><description>&lt;p&gt;I was hoping that Microsoft would address &lt;a href="http://otb.manusoft.com/2010/01/visual-studio-2010-and-vc-build-hook.htm"&gt;the need to target earlier versions of Visual Studio&lt;/a&gt; within the Visual Studio 2010 IDE, but since &lt;a href="https://connect.microsoft.com/VisualStudio/feedback/details/570466/vs-2010-native-build-cannot-produce-ansi-response-files"&gt;they decided to punt&lt;/a&gt;, I tackled the problem myself. I&amp;rsquo;ve released my solution as an open source project named &lt;a href="http://daffodil.codeplex.com/"&gt;Daffodil for Visual Studio&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>The Cancel Retry Paradox</title><link>http://www.manusoft.com/archive/blog/the-cancel-retry-paradox/</link><pubDate>Wed, 25 Aug 2010 15:19:09 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/the-cancel-retry-paradox/</guid><description>&lt;p&gt;Yesterday when I attempted to install the &lt;a href="http://withoutanet.typepad.com/without_a_net/2010/08/update-1-released-for-autocad-and-autocad-lt-2011-.html"&gt;AutoCAD 2011 service pack&lt;/a&gt; (er, I mean &amp;ldquo;update&amp;rdquo;), I encountered the classic UI paradox where you&amp;rsquo;re forced to choose from a set of equally undesirable choices, this time with a bonus.&lt;/p&gt;
&lt;p&gt;I received error 1321. My choices were to retry or cancel. If I chose to retry, I got the same error again. If I chose to cancel, I got a bonus question: it asked whether I really wanted to cancel. I had to lie and choose yes, otherwise I would be trapped in an infinite loop.&lt;/p&gt;</description></item><item><title>Missing Language Pack DWG File Repair</title><link>http://www.manusoft.com/archive/blog/missing-language-pack-dwg-file-repair/</link><pubDate>Thu, 22 Jul 2010 00:11:46 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/missing-language-pack-dwg-file-repair/</guid><description>&lt;p&gt;I &lt;a href="http://otb.manusoft.com/2009/08/autocad-anguage-pack-drawing-file.htm"&gt;wrote before&lt;/a&gt; about corrupt text causing bogus &amp;ldquo;Missing Language Pack&amp;rdquo; warnings in AutoCAD. That case prompted me to write a file repair utility. However, since the case appeared to be isolated, I never released the utility to the public.&lt;/p&gt;
&lt;p&gt;The problem has been &lt;a href="http://www.blog.cadnauseam.com/2010/07/22/partial-fix-for-language-pack-problem/"&gt;rearing its ugly head again&lt;/a&gt;, so I decided to dust off the original code and release it. The repair utility is now available on the &lt;a href="http://www.manusoft.com/software/freebies/arx.html"&gt;freebies page&lt;/a&gt; (look for CleanLanguage.zip) for AutoCAD 2007 and later versions of AutoCAD. I have not tested any recent cases, so I can&amp;rsquo;t be sure it is the same problem. If you try the utility, please report your results by leaving a comment here.&lt;/p&gt;</description></item><item><title>Using VC 7 build tools in Visual Studio 2010</title><link>http://www.manusoft.com/archive/blog/using-vc-7-build-tools-in-visual-studio-2010/</link><pubDate>Thu, 24 Jun 2010 16:13:38 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/using-vc-7-build-tools-in-visual-studio-2010/</guid><description>&lt;p&gt;&lt;em&gt;[Update: See &lt;/em&gt;&lt;a href="http://otb.manusoft.com/2010/10/visual-studio-2010-native-multi-targeting.htm"&gt;&lt;em&gt;Visual Studio 2010 Native Multi-Targeting&lt;/em&gt;&lt;/a&gt;&lt;em&gt;]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Developers, if you use &lt;a href="http://www.manusoft.com/resources/arxtips/vcbuildhook.html"&gt;VC Build Hook&lt;/a&gt; and/or need the same capability in Visual Studio 2010, please let Microsoft know by &lt;a href="https://connect.microsoft.com/VisualStudio/feedback/details/570466/vs-2010-native-build-cannot-produce-ansi-response-files"&gt;voting for a fix&lt;/a&gt;. I&amp;rsquo;ve &lt;a href="http://otb.manusoft.com/2010/01/visual-studio-2010-and-vc-build-hook.htm"&gt;written before&lt;/a&gt; (and &lt;a href="http://otb.manusoft.com/2010/04/visual-studio-2010-ships.htm"&gt;here&lt;/a&gt;) about the problem. I think it is possible to hack a third party solution, but by far the best solution is for Microsoft to add back the ability to produce ANSI response files in service pack 1.&lt;/p&gt;</description></item><item><title>GlowCode Success Story</title><link>http://www.manusoft.com/archive/blog/glowcode-success-story/</link><pubDate>Sat, 12 Jun 2010 18:56:33 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/glowcode-success-story/</guid><description>&lt;p&gt;I use &lt;a href="http://www.glowcode.com"&gt;GlowCode&lt;/a&gt; for profiling ObjectARX applications. As far as I know, this is the only profiler that works with AutoCAD. What makes GlowCode special is that it can instrument code on the fly, including a monster like AutoCAD. It has a clunky interface that takes some patience to figure out, but it&amp;rsquo;s a lifesaver when you need it.&lt;/p&gt;</description></item><item><title>Bricsys 2010 Developer Conference Post Mortem</title><link>http://www.manusoft.com/archive/blog/bricsys-2010-developer-conference-post-mortem/</link><pubDate>Fri, 11 Jun 2010 17:09:02 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/bricsys-2010-developer-conference-post-mortem/</guid><description>&lt;p&gt;I am back home after a whirlwind trip to the &lt;a href="http://www.bricsys.com/conference/"&gt;Bricsys 2010 Conference&lt;/a&gt;. I&amp;rsquo;m very happy to be back to Ohio food and my own bed. It was a great experience and well worth the trouble.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve &lt;a href="http://otb.manusoft.com/2007/12/au-2007-post-mortem.htm"&gt;written before&lt;/a&gt; (and &lt;a href="http://www.manusoft.com/resources/anecdotes/au97.html"&gt;here&lt;/a&gt;) about the problem with food at conferences, and this one was no different. Unfortunately, there are no Burger Kings in Belgium, so the problem was compounded. I was excited when I saw a restaurant touting &amp;ldquo;American Food&amp;rdquo;, unfortunately it was &amp;ldquo;American Food as Europeans Imagine It&amp;rdquo;, which is not American food at all.&lt;/p&gt;</description></item><item><title>Belgium Bound</title><link>http://www.manusoft.com/archive/blog/belgium-bound/</link><pubDate>Sun, 06 Jun 2010 08:24:11 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/belgium-bound/</guid><description>&lt;p&gt;&lt;a href="http://www.bricsys.com"&gt;Bricsys&lt;/a&gt; asked me to give a short presentation about &lt;a href="http://opendcl.com/wordpress/?p=137"&gt;OpenDCL&lt;/a&gt; to developers at their &lt;a href="http://www.bricsys.com/conference/"&gt;Bricsys 2010 Conference&lt;/a&gt; in Bruges next week. I&amp;rsquo;m looking forward to meet keynote speaker &lt;a href="http://www.deelip.com"&gt;Deelip Menezes&lt;/a&gt; and other familiar names in the CAD community, and of course planning to learn more about the ever evolving Bricscad platform.&lt;/p&gt;</description></item><item><title>Visual Studio 2010 Ships</title><link>http://www.manusoft.com/archive/blog/visual-studio-2010-ships/</link><pubDate>Mon, 12 Apr 2010 20:34:40 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/visual-studio-2010-ships/</guid><description>&lt;p&gt;Visual Studio 2010 &lt;a href="http://blogs.msdn.com/visualstudio/archive/2010/04/12/visual-studio-2010-is-now-available.aspx"&gt;shipped today&lt;/a&gt; accompanied by .NET Framework 4.0. I blogged before about the switch to using the MSBuild build system, and how that theoretically could be helpful in targeting multiple AutoCAD versions from the same solution. The shipping VS 2010 does not support non-Unicode response files, so out-of-the-box it cannot target VC 7.0 (for AutoCAD 2006 and earlier). When time permits, I&amp;rsquo;m planning to see if I can find a workaround; in the meantime, I&amp;rsquo;ll continue to use VS 2008 for ObjectARX.&lt;/p&gt;</description></item><item><title>Port Your ObjectARX Code to 64 Bit</title><link>http://www.manusoft.com/archive/blog/port-your-objectarx-code-to-64-bit/</link><pubDate>Thu, 11 Mar 2010 23:08:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/port-your-objectarx-code-to-64-bit/</guid><description>&lt;p&gt;AutoCAD versions since AutoCAD 2008 (and since AutoCAD LT 2009) have included both 32 bit and 64 bit flavors on the same media. If you install on a 64 bit Windows system, you get the 64 bit AutoCAD; otherwise you get the 32 bit AutoCAD. The 64 bit AutoCAD can take advantage of as much memory as you can throw at it, whereas the 32 bit version is limited to 2 GB (3 GB if you cheat). They should be otherwise identical in theory, but in practice there are major differences.&lt;br /&gt;&lt;br /&gt;One big difference is VBA. Microsoft put VBA out to pasture many years ago when they introduced the .NET framework, so there will never be a 64 bit version of VBA. Autodesk had to resort to a seriously inefficient kludge to get it to work at all in the 64 bit flavor of AutoCAD (VBA has to run in a separate 32 bit process, which makes typical applications two orders of magnitude slower).&lt;br /&gt;&lt;br /&gt;The other big difference is that any third party ObjectARX applications must be installed for the correct architecture. A 32 bit ObjectARX application will not work in a 64 bit AutoCAD. [Note that .NET (or &amp;ldquo;managed&amp;rdquo;) applications typically work fine in both architectures &amp;ndash; I&amp;rsquo;m referring to native C++ ObjectARX applications only.]&lt;br /&gt;&lt;br /&gt;On the Autodesk discussion groups, many people ask how they can install the 32 bit version of AutoCAD on their new 64 bit operating system. Why would they want to do that? Almost always because they need to use an application that is only available for 32 bit AutoCAD architectures, or because they discover that their VBA applications become unbearably slow.&lt;br /&gt;&lt;br /&gt;It is possible, with some hacking of the AutoCAD installation database, to install the 32 bit flavor of AutoCAD on a 64 bit system, but I don&amp;rsquo;t recommend that. There is just no excuse any more to not support the 64 bit architecture. If you find yourself in this situation, put pressure on the developer of the application to get it ported.&lt;br /&gt;&lt;br /&gt;In fact, if you rely on an application that hasn&amp;rsquo;t been ported to the 64 bit architecture, I&amp;rsquo;d like to hear from you. Add a comment to this post and let me know the name of the application. If you are a vendor or developer that has not yet ported your 32 bit application, please &lt;a href="mailto:owenw@manusoft.com"&gt;contact me&lt;/a&gt; &amp;ndash; I will gladly port it for you. Even large applications can typically be ported in several hours.&lt;br /&gt;&lt;br /&gt;BTW, I am well aware that even Autodesk is guilty of not supporting 64 bit platforms in some of its vertical market AutoCAD versions (and corresponding object enablers). I certainly hope they remedy that situation in the next release cycle.&lt;/p&gt;</description></item><item><title>Visual Studio 2010 and VC Build Hook</title><link>http://www.manusoft.com/archive/blog/visual-studio-2010-and-vc-build-hook/</link><pubDate>Mon, 11 Jan 2010 20:32:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/visual-studio-2010-and-vc-build-hook/</guid><description>&lt;p&gt;&lt;em&gt;[Update: See &lt;/em&gt;&lt;a href="http://otb.manusoft.com/2010/10/visual-studio-2010-native-multi-targeting.htm"&gt;&lt;em&gt;Visual Studio 2010 Native Multi-Targeting&lt;/em&gt;&lt;/a&gt;&lt;em&gt;]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Many of you use my &lt;a href="http://www.manusoft.com/resources/arxtips/vcbuildhook.html"&gt;VC Build Hook utility&lt;/a&gt; to target multiple versions of AutoCAD from a single solution in Visual Studio 2008. Visual Studio 2010 now includes a new feature called &lt;a href="http://blogs.msdn.com/vcblog/archive/2009/12/08/c-native-multi-targeting.aspx"&gt;native multi-targeting&lt;/a&gt; that performs the same function as VC Build Hook. The new feature works great for using build tools back to VC 7.1, but it does not work with VC 7, which is required for targeting AutoCAD versions 2006 and earlier.&lt;/p&gt;</description></item><item><title>Automatic LISP Loading</title><link>http://www.manusoft.com/archive/blog/automatic-lisp-loading/</link><pubDate>Thu, 24 Dec 2009 12:12:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/automatic-lisp-loading/</guid><description>&lt;p&gt;There are a myriad of ways to load AutoLISP applications in AutoCAD, including acaddoc.lsp, an .mnl file, the Startup Suite, and manually by various means. For application developers wishing to deploy their applications to others, all of these methods have drawbacks. The ideal solution should be easy to implement in an installation program, require minimal or zero changes to the user&amp;rsquo;s AutoCAD configuration, work the same way across all versions of AutoCAD, and easily undone when the application is uninstalled.&lt;/p&gt;</description></item><item><title>ArxDbg Utility</title><link>http://www.manusoft.com/archive/blog/arxdbg-utility/</link><pubDate>Wed, 23 Sep 2009 18:31:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/arxdbg-utility/</guid><description>&lt;p&gt;ArxDbg is the name of a sample project that has been included with the ObjectARX SDK for many years. It&amp;rsquo;s primary purpose is to demonstrate how to use the ObjectARX API, but it is a complete free-standing utility in its own right. ObjectARX programmers often use this utility during development for testing and exercising their application code, but it can be useful to anybody, not just programmers.&lt;/p&gt;</description></item><item><title>If you want it done right...</title><link>http://www.manusoft.com/archive/blog/if-you-want-it-done-right/</link><pubDate>Wed, 08 Jul 2009 09:05:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/if-you-want-it-done-right/</guid><description>&lt;p&gt;I&amp;rsquo;ve proved once again that if you want it done right, you have to do it yourself. The ManuSoft web site is fully functional again after my longtime ISP had a major network meltdown. I waited for two weeks for them to repair it, then finally moved to a different provider. The new provider&amp;rsquo;s promised &amp;ldquo;24/7 tech support&amp;rdquo; turned out to mean &amp;ldquo;24 hours to respond, 7 days to fix&amp;rdquo; every problem, not to mention that I would need to provide step by step instructions to their techs so they could configure the server the way I needed. After two weeks of that, I gave up and configured my own server and now host it myself.&lt;br /&gt;&lt;br /&gt;Let this be a warning to all of you hosting web sites with reputable providers, or storing your data somewhere in the cloud. I paid big bucks every month to my old provider for secure servers, redundant power supplies, managed and air conditioned server rooms, nightly backups, 99% uptime, etc., but they still lost everything. Almost a month later they still haven&amp;rsquo;t restored their customers&amp;rsquo; data. Luckily, I make my own backups.&lt;/p&gt;</description></item><item><title>ObjectARX 2010: Dealing With Missing Exports</title><link>http://www.manusoft.com/archive/blog/objectarx-2010-dealing-with-missing/</link><pubDate>Sat, 28 Mar 2009 16:54:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/objectarx-2010-dealing-with-missing/</guid><description>&lt;p&gt;In the new ObjectARX 2010 SDK, Autodesk has added some new virtual member functions that are not exported as they should be. For example, the AcGiFaceData class has had two new virtual functions added for setting and getting the face transparency:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color:#990000;"&gt;class&lt;/span&gt; AcGiFaceData&lt;b&gt;&lt;span style="color:#663300;"&gt;:&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt; public&lt;/span&gt; AcRxObject&lt;b&gt;&lt;span style="color:#663300;"&gt;&lt;br /&gt;{&lt;/span&gt;&lt;/b&gt;&lt;i&gt;&lt;span style="color:#999999;"&gt;&lt;br /&gt;//[&amp;hellip; deleted for brevity]&lt;br /&gt;&lt;/span&gt;&lt;/i&gt; ACDB_PORT&lt;span style="color:#990000;"&gt; virtual&lt;/span&gt; AcDbObjectId&lt;b&gt;&lt;span style="color:#663300;"&gt;&lt;em&gt;&lt;/span&gt;&lt;/b&gt; materials&lt;b&gt;&lt;span style="color:#663300;"&gt;()&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt; const&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt; ACDB_PORT&lt;span style="color:#990000;"&gt; virtual&lt;/span&gt; AcGiMapper&lt;b&gt;&lt;span style="color:#663300;"&gt;&lt;/em&gt;&lt;/span&gt;&lt;/b&gt; mappers&lt;b&gt;&lt;span style="color:#663300;"&gt;()&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt; const&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#990000;"&gt; virtual&lt;/span&gt;&lt;span style="color:#ff6633;"&gt; void&lt;/span&gt; setTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;const&lt;/span&gt; AcCmTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt; &lt;em&gt;&lt;/span&gt;&lt;/b&gt;transparency&lt;b&gt;&lt;span style="color:#663300;"&gt;);&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt; virtual&lt;/span&gt; AcCmTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;&lt;/em&gt;&lt;/span&gt;&lt;/b&gt; transparency&lt;b&gt;&lt;span style="color:#663300;"&gt;()&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt; const&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt;private&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt; AcGiImpFaceData&lt;b&gt;&lt;span style="color:#663300;"&gt; &lt;em&gt;&lt;/span&gt;&lt;/b&gt;mpAcGiImpFaceData&lt;b&gt;&lt;span style="color:#663300;"&gt;;&lt;br /&gt;};&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;As you can see, whoever added the new functions neglected to prefix them with the ACDB_PORT macro. ACDB_PORT evaluates to __declspec(export), which tells the compiler to export the function. Since the macro is missing, the new functions are not exported from acdb18.dll.&lt;br /&gt;&lt;br /&gt;Since these are virtual functions, you won&amp;rsquo;t have any problems calling them through a pointer to an AcGiFaceData object that was constructed by AutoCAD. The problem arises when you derive a class from AcGiFaceData. Since the functions are not exported, the linker has no way of resolving their address for creating the virtual function table of your derived class. This results in linker errors:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;acrxEntryPoint.obj : error LNK2001: unresolved external symbol &amp;ldquo;public: virtual void __thiscall AcGiFaceData::setTransparency(class AcCmTransparency const &lt;em&gt;)&amp;rdquo; (?setTransparency@AcGiFaceData@@UAEXPBVAcCmTransparency@@@Z)&lt;br /&gt;acrxEntryPoint.obj : error LNK2001: unresolved external symbol &amp;ldquo;public: virtual class AcCmTransparency * __thiscall AcGiFaceData::transparency(void)const &amp;quot; (?transparency@AcGiFaceData@@UBEPAVAcCmTransparency@@XZ)&lt;/blockquote&gt;Following is an example that results in these errors:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color:#990000;"&gt;class&lt;/span&gt; AcGiFaceDataEx&lt;b&gt;&lt;span style="color:#663300;"&gt;:&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt; public&lt;/span&gt; AcGiFaceData&lt;b&gt;&lt;span style="color:#663300;"&gt;&lt;br /&gt;{&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt;public&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt; AcGiFaceDataEx&lt;b&gt;&lt;span style="color:#663300;"&gt;() {}&lt;br /&gt; ~&lt;/span&gt;&lt;/b&gt;AcGiFaceDataEx&lt;b&gt;&lt;span style="color:#663300;"&gt;() {}&lt;br /&gt;}&lt;/span&gt;&lt;/b&gt; Test&lt;b&gt;&lt;span style="color:#663300;"&gt;;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The only solution is to provide an implementation of the missing functions. In this case, it could be accomplished by something like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color:#990000;"&gt;class&lt;/span&gt; AcGiFaceDataEx&lt;b&gt;&lt;span style="color:#663300;"&gt;:&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt; public&lt;/span&gt; AcGiFaceData&lt;b&gt;&lt;span style="color:#663300;"&gt;&lt;br /&gt;{&lt;/span&gt;&lt;/b&gt;&lt;br /&gt; AcCmTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;&lt;/em&gt;&lt;/span&gt;&lt;/b&gt; mpTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;;&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt;public&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt; AcGiFaceDataEx&lt;b&gt;&lt;span style="color:#663300;"&gt;() :&lt;/span&gt;&lt;/b&gt; mpTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt; NULL&lt;b&gt;&lt;span style="color:#663300;"&gt; ) {}&lt;br /&gt; ~&lt;/span&gt;&lt;/b&gt;AcGiFaceDataEx&lt;b&gt;&lt;span style="color:#663300;"&gt;() {&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt; delete&lt;/span&gt; mpTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;; }&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt; virtual&lt;/span&gt;&lt;span style="color:#ff6633;"&gt; void&lt;/span&gt; setTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;const&lt;/span&gt; AcCmTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt; &lt;em&gt;&lt;/span&gt;&lt;/b&gt;transparency&lt;b&gt;&lt;span style="color:#663300;"&gt;)&lt;br /&gt; {&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt; delete&lt;/span&gt; mpTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt; mpTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt; = (&lt;/span&gt;&lt;/b&gt;transparency&lt;b&gt;&lt;span style="color:#663300;"&gt;?&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt; new&lt;/span&gt; AcCmTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;( &lt;em&gt;&lt;/span&gt;&lt;/b&gt;transparency&lt;b&gt;&lt;span style="color:#663300;"&gt; ) :&lt;/span&gt;&lt;/b&gt; NULL&lt;b&gt;&lt;span style="color:#663300;"&gt;);&lt;br /&gt; }&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt; virtual&lt;/span&gt; AcCmTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;&lt;/em&gt;&lt;/span&gt;&lt;/b&gt; transparency&lt;b&gt;&lt;span style="color:#663300;"&gt;()&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt; const&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt; {&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff0000;"&gt; return&lt;/span&gt; mpTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;; }&lt;br /&gt;}&lt;/span&gt;&lt;/b&gt; Test&lt;b&gt;&lt;span style="color:#663300;"&gt;;&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;This will fix the linker errors, but there is no guarantee that it will work as intended. AutoCAD might access its internal transparency value directly without calling through the member functions, which means it would never &amp;ldquo;see&amp;rdquo; the transparency set through the replacement member functions. Furthermore, the addition of the new pointer member changes the size of the class, which causes AcGiFaceDataEx arrays to have a different memory footprint than AcGiFaceData arrays. Lastly, what if Autodesk fixes the problem in a future AutoCAD service pack?&lt;br /&gt;&lt;br /&gt;The ideal solution should not change the size of the class. It should check at runtime whether the function is exported, then use the exported function if it exists. That way, code that is written now will use the exported function if and when it becomes available in a future version of AutoCAD. When the function is not exported, an alternate implementation must be provided. This is not an unusual scenario, and the solution I present for the specific case of AcGiFaceData can be adapted to the more general problem.&lt;br /&gt;&lt;br /&gt;In the AcGiFaceData case, the missing functions are virtual functions. Knowing this, it is possible to use a trick to get the address of the real function. In the code below, the function getAcGiFaceData_vtable() constructs a temporary AcGiFaceData object, from which it extracts a pointer to the object&amp;rsquo;s virtual function table. The virtual function table is just an array of function pointers, so the address of the desired function can be obtained by indexing into the virtual function table. The question is, how far? By counting virtual functions and data members starting from the top of the class hierarchy: in this case, 6 virtual functions in AcRxObject plus 16 virtual functions in AcGiFaceData = 22.&lt;br /&gt;&lt;br /&gt;Note that obtaining a function pointer this way relies on Visual C++ implementation details, but this is safe to do since all ObjectARX modules must be compiled in Visual C++.&lt;br /&gt;&lt;br /&gt;Following is my solution to the missing AcGiFaceData functions:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color:#000099;"&gt;#pragma warning(push)&lt;br /&gt;#pragma warning(disable: 4608)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#990000;"&gt;template&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt; &amp;lt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt; typename&lt;/span&gt; Src&lt;b&gt;&lt;span style="color:#663300;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt; typename&lt;/span&gt; Dest&lt;b&gt;&lt;span style="color:#663300;"&gt; &amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Dest force_cast&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt; Src src&lt;b&gt;&lt;span style="color:#663300;"&gt; )&lt;br /&gt;{&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt; union&lt;/span&gt; _convertor&lt;b&gt;&lt;span style="color:#663300;"&gt; {&lt;/span&gt;&lt;/b&gt; Dest d&lt;b&gt;&lt;span style="color:#663300;"&gt;;&lt;/span&gt;&lt;/b&gt; Src s&lt;b&gt;&lt;span style="color:#663300;"&gt;;&lt;/span&gt;&lt;/b&gt; _convertor&lt;b&gt;&lt;span style="color:#663300;"&gt;() :&lt;/span&gt;&lt;/b&gt; d&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#999900;"&gt;0&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;),&lt;/span&gt;&lt;/b&gt; s&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#999900;"&gt;0&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;) {} }&lt;/span&gt;&lt;/b&gt; convertor&lt;b&gt;&lt;span style="color:#663300;"&gt;;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt; convertor&lt;b&gt;&lt;span style="color:#663300;"&gt;.&lt;/span&gt;&lt;/b&gt;s&lt;b&gt;&lt;span style="color:#663300;"&gt; =&lt;/span&gt;&lt;/b&gt; src&lt;b&gt;&lt;span style="color:#663300;"&gt;;&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff0000;"&gt;&lt;br /&gt; return&lt;/span&gt; convertor&lt;b&gt;&lt;span style="color:#663300;"&gt;.&lt;/span&gt;&lt;/b&gt;d&lt;b&gt;&lt;span style="color:#663300;"&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#000099;"&gt;&lt;br /&gt;#pragma warning(pop)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt;static&lt;/span&gt; FARPROC&lt;b&gt;&lt;span style="color:#663300;"&gt;&lt;/em&gt;&lt;/span&gt;&lt;/b&gt; getAcGiFaceData_vtable&lt;b&gt;&lt;span style="color:#663300;"&gt;()&lt;br /&gt;{&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt; static&lt;/span&gt; FARPROC&lt;b&gt;&lt;span style="color:#663300;"&gt;&lt;/em&gt;&lt;/span&gt;&lt;/b&gt; rfVTable&lt;b&gt;&lt;span style="color:#663300;"&gt; = &lt;em&gt;(&lt;/span&gt;&lt;/b&gt;FARPROC&lt;b&gt;&lt;span style="color:#663300;"&gt;**)&amp;amp;&lt;/span&gt;&lt;/b&gt;AcGiFaceData&lt;b&gt;&lt;span style="color:#663300;"&gt;();&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff0000;"&gt;&lt;br /&gt; return&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt; (&lt;/span&gt;&lt;/b&gt;rfVTable&lt;b&gt;&lt;span style="color:#663300;"&gt;?&lt;/span&gt;&lt;/b&gt; rfVTable&lt;b&gt;&lt;span style="color:#663300;"&gt; :&lt;/span&gt;&lt;/b&gt; NULL&lt;b&gt;&lt;span style="color:#663300;"&gt;);&lt;br /&gt;}&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff6633;"&gt;&lt;br /&gt;&lt;br /&gt;void&lt;/span&gt; AcGiFaceData&lt;b&gt;&lt;span style="color:#663300;"&gt;::&lt;/span&gt;&lt;/b&gt;setTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt; const&lt;/span&gt; AcCmTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;&lt;/em&gt;&lt;/span&gt;&lt;/b&gt; transparency&lt;b&gt;&lt;span style="color:#663300;"&gt; )&lt;br /&gt;{&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt; typedef&lt;/span&gt;&lt;span style="color:#ff6633;"&gt; void&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt; (&lt;/span&gt;&lt;/b&gt;AcGiFaceData&lt;b&gt;&lt;span style="color:#663300;"&gt;::&lt;em&gt;&lt;/span&gt;&lt;/b&gt;F_setTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;)(&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt; const&lt;/span&gt; AcCmTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;&lt;/em&gt; );&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt; static&lt;/span&gt; F_setTransparency pfSetTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt; =&lt;/span&gt;&lt;/b&gt; force_cast&lt;b&gt;&lt;span style="color:#663300;"&gt;&amp;lt;&lt;/span&gt;&lt;/b&gt; FARPROC&lt;b&gt;&lt;span style="color:#663300;"&gt;,&lt;/span&gt;&lt;/b&gt; F_setTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt; &amp;gt;(&lt;/span&gt;&lt;/b&gt;GetProcAddress&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt; GetModuleHandleA&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#009900;"&gt; &amp;ldquo;acdb18.dll&amp;rdquo;&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;),&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#009900;"&gt; &amp;ldquo;?setTransparency@AcGiFaceData@@UEAAXPEBVAcCmTransparency@@@Z&amp;rdquo;&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt; ));&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff0000;"&gt;&lt;br /&gt; if&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;( !&lt;/span&gt;&lt;/b&gt;pfSetTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt; )&lt;br /&gt; {&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt; static&lt;/span&gt; FARPROC&lt;b&gt;&lt;span style="color:#663300;"&gt;&lt;em&gt;&lt;/span&gt;&lt;/b&gt; rfVTable&lt;b&gt;&lt;span style="color:#663300;"&gt; =&lt;/span&gt;&lt;/b&gt; getAcGiFaceData_vtable&lt;b&gt;&lt;span style="color:#663300;"&gt;();&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff0000;"&gt;&lt;br /&gt; if&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt; rfVTable&lt;b&gt;&lt;span style="color:#663300;"&gt; )&lt;/span&gt;&lt;/b&gt;&lt;br /&gt; pfSetTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt; =&lt;/span&gt;&lt;/b&gt; force_cast&lt;b&gt;&lt;span style="color:#663300;"&gt;&amp;lt;&lt;/span&gt;&lt;/b&gt; FARPROC&lt;b&gt;&lt;span style="color:#663300;"&gt;,&lt;/span&gt;&lt;/b&gt; F_setTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt; &amp;gt;(&lt;/span&gt;&lt;/b&gt; rfVTable&lt;b&gt;&lt;span style="color:#663300;"&gt;[&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#999900;"&gt;22&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;] );&lt;br /&gt; }&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff0000;"&gt;&lt;br /&gt; if&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt; pfSetTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt; )&lt;br /&gt; (&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;this&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;-&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;/b&gt;pfSetTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;)(&lt;/span&gt;&lt;/b&gt; transparency&lt;b&gt;&lt;span style="color:#663300;"&gt; );&lt;br /&gt;}&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;AcCmTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;&lt;em&gt;&lt;/span&gt;&lt;/b&gt; AcGiFaceData&lt;b&gt;&lt;span style="color:#663300;"&gt;::&lt;/span&gt;&lt;/b&gt;transparency&lt;b&gt;&lt;span style="color:#663300;"&gt;()&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt; const&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;&lt;br /&gt;{&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt; typedef&lt;/span&gt; AcCmTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;&lt;/em&gt; (&lt;/span&gt;&lt;/b&gt;AcGiFaceData&lt;b&gt;&lt;span style="color:#663300;"&gt;::&lt;em&gt;&lt;/span&gt;&lt;/b&gt;F_transparency&lt;b&gt;&lt;span style="color:#663300;"&gt;)()&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt; const&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;;&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt; static&lt;/span&gt; F_transparency pfTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt; =&lt;/span&gt;&lt;/b&gt; force_cast&lt;b&gt;&lt;span style="color:#663300;"&gt;&amp;lt;&lt;/span&gt;&lt;/b&gt; FARPROC&lt;b&gt;&lt;span style="color:#663300;"&gt;,&lt;/span&gt;&lt;/b&gt; F_transparency&lt;b&gt;&lt;span style="color:#663300;"&gt; &amp;gt;(&lt;/span&gt;&lt;/b&gt;GetProcAddress&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt; GetModuleHandleA&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#009900;"&gt; &amp;ldquo;acdb18.dll&amp;rdquo;&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;),&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#009900;"&gt; &amp;ldquo;?transparency@AcGiFaceData@@UEBAPEAVAcCmTransparency@@XZ&amp;rdquo;&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt; ));&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff0000;"&gt;&lt;br /&gt; if&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;( !&lt;/span&gt;&lt;/b&gt;pfTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt; )&lt;br /&gt; {&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt; static&lt;/span&gt; FARPROC&lt;b&gt;&lt;span style="color:#663300;"&gt;&lt;/em&gt;&lt;/span&gt;&lt;/b&gt; rfVTable&lt;b&gt;&lt;span style="color:#663300;"&gt; =&lt;/span&gt;&lt;/b&gt; getAcGiFaceData_vtable&lt;b&gt;&lt;span style="color:#663300;"&gt;();&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff0000;"&gt;&lt;br /&gt; if&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt; rfVTable&lt;b&gt;&lt;span style="color:#663300;"&gt; )&lt;/span&gt;&lt;/b&gt;&lt;br /&gt; pfTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt; =&lt;/span&gt;&lt;/b&gt; force_cast&lt;b&gt;&lt;span style="color:#663300;"&gt;&amp;lt;&lt;/span&gt;&lt;/b&gt; FARPROC&lt;b&gt;&lt;span style="color:#663300;"&gt;,&lt;/span&gt;&lt;/b&gt; F_transparency&lt;b&gt;&lt;span style="color:#663300;"&gt; &amp;gt;(&lt;/span&gt;&lt;/b&gt; rfVTable&lt;b&gt;&lt;span style="color:#663300;"&gt;[&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#999900;"&gt;23&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;] );&lt;br /&gt; }&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff0000;"&gt;&lt;br /&gt; if&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt; pfTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt; )&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff0000;"&gt;&lt;br /&gt; return&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt; (&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;this&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;-&amp;gt;*&lt;/span&gt;&lt;/b&gt;pfTransparency&lt;b&gt;&lt;span style="color:#663300;"&gt;)();&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff0000;"&gt;&lt;br /&gt; return&lt;/span&gt; NULL&lt;b&gt;&lt;span style="color:#663300;"&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;/p&gt;</description></item><item><title>Autodesk Discussion Group Facelift Offer</title><link>http://www.manusoft.com/archive/blog/autodesk-discussion-group-facelift/</link><pubDate>Wed, 28 Jan 2009 12:00:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/autodesk-discussion-group-facelift/</guid><description>&lt;p&gt;My participation in the &lt;a href="http://www.autodesk.com/discussion"&gt;Autodesk discussion groups&lt;/a&gt; has been severely curtailed since the notorious &amp;ldquo;upgrade&amp;rdquo; a few months ago. One of the &lt;a href="http://www.blog.cadnauseam.com/2008/10/21/the-autodesk-discussion-groups-are-awful/"&gt;many problems&lt;/a&gt; introduced by the upgrade is the loss of formatting. It&amp;rsquo;s now virtually impossible to post messages that include inline AutoLISP or ObjectARX code without them being reformatted into unreadable garbage. Even attaching the code as a file is difficult (the &amp;ldquo;solution&amp;rdquo; is to rename files with a .txt extension!) As a result, many queries for programming help go unanswered. Autodesk has &lt;a href="http://discussion.autodesk.com/forums/ann.jspa?annID=125"&gt;made an attempt to provide a fix&lt;/a&gt;, but a survey of the posts in any of the programming groups shows that &lt;a href="http://otb.manusoft.com/files/Newsgroup%20needs%20complete%20overhaul.htm"&gt;it&amp;rsquo;s not working&lt;/a&gt;&lt;em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/em&gt; [Thread has been removed by Autodesk, so link was changed to point to archived thread.]&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.marketwatch.com/story/autodesk-to-miss-earnings-target-cut-750-jobs"&gt;recently announced layoffs and related cost cutting measures at Autodesk&lt;/a&gt; have dimmed my hopes for a resolution. Therefore, I&amp;rsquo;ve decided to offer my services to fix the problem. Autodesk, I&amp;rsquo;m offering to donate my time to fix your discussion group software. Just give me access to a development and testing platform, and the right to modify or rewrite the code.&lt;br /&gt;&lt;br /&gt;Readers, can I get an &amp;ldquo;Amen&amp;rdquo;?&lt;/p&gt;</description></item><item><title>AECOPEN Utility</title><link>http://www.manusoft.com/archive/blog/aecopen-utility/</link><pubDate>Sat, 24 Jan 2009 17:07:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/aecopen-utility/</guid><description>&lt;p&gt;James Maeding of Hunsaker &amp;amp; Associates contacted me recently about an irritating problem that his users have with the AECOPEN command in Land Desktop. The AECOPEN command replaces the core AutoCAD OPEN command in AEC verticals. The problem they have is that AECOPEN displays an initial project dialog that requires users to press a [Browse] button to open the file browser dialog. Since they want to browse for a file every time they use the AECOPEN command, James wondered if I could create some code to automatically &amp;ldquo;press&amp;rdquo; the Browse button every time the AECOPEN command is issued.&lt;br /&gt;&lt;br /&gt;I whipped up a little utility for AutoCAD 2007-2009 based products to do what James wanted, and it is now available on my &lt;a href="http://www.manusoft.com/software/freebies/arx.html"&gt;freebies page&lt;/a&gt; as AecAutoOpen.zip. When the ARX module is loaded, AECOPEN behaves as if the user had immediately pressed the [Browse] button on the project dialog. If the [Ctrl] key is pressed, AECOPEN reverts to its original behavior.&lt;br /&gt;&lt;br /&gt;Why not just use the built in OPEN command instead? The AECOPEN command has some important side effects, according to James.&lt;/p&gt;</description></item><item><title>Design File Locking and Snake Oil Security</title><link>http://www.manusoft.com/archive/blog/design-file-locking-and-snake-oil/</link><pubDate>Sat, 06 Dec 2008 14:52:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/design-file-locking-and-snake-oil/</guid><description>&lt;p&gt;The increased sharing of electronic CAD data (ala &lt;a href="http://en.wikipedia.org/wiki/Building_Information_Modeling"&gt;BIM&lt;/a&gt;) holds a lot of promise, but it also exposes companies and individuals to additional liability and risk. This additional risk is coming into focus more and more as &lt;a href="http://otb.manusoft.com/2007/01/autocad-drawing-files-possession-is-910.htm"&gt;actual cases of costly legal battles&lt;/a&gt; confront engineers and architects.&lt;br /&gt;&lt;br /&gt;The June 2008 &lt;a href="http://www.augi.com/autocad/results.asp?cycle=ACAD008"&gt;AUGI wishlist results&lt;/a&gt; contain &amp;ldquo;Design File Locking&amp;rdquo; as the top wish by a substantial margin, and Shaan Hurley lists it as number 3 in the &lt;a href="http://autodesk.blogs.com/between_the_lines/2008/12/au-2008-wednesday-autocad-wish-list.html"&gt;AU 2008 AutoCAD wish list&lt;/a&gt;. Clearly, interest in file and IP security has been growing steadily.&lt;br /&gt;&lt;br /&gt;As demand for IP security grows, there are sure to be snake oil security vendors trying to cash in on it. I received a spam email a few days ago from SafeNet, Inc. promising &amp;ldquo;a cost-effective and easy to integrate solution that provides reliable and effective security through the use of digital signatures.&amp;rdquo; Whenever I see such statements with a long string of buzzwords, my snake oil alarm goes on alert. Digital signatures are for authentication and establishing trust &amp;ndash; they cannot and do not provide &amp;ldquo;reliable and effective security&amp;rdquo;, although I suppose they could be used by a system that does.&lt;br /&gt;&lt;br /&gt;In the last year or two, a number of companies have claimed to market software that &amp;ldquo;secures&amp;rdquo; AutoCAD DWG files. When I see such a claim, it invariably refers to software that creates an anonymous unequally scaled MINSERT entity. These can be created or &amp;ldquo;exploded&amp;rdquo; with a few lines of AutoLISP code. Frequently these companies claim to &amp;ldquo;encrypt&amp;rdquo; the drawing, which may sound sexy, but is an outright lie. If this is a level of &amp;ldquo;security&amp;rdquo; that meets your needs, at least use one of the many free versions posted throughout the internet (&lt;a href="http://www.dotsoft.com/freestuff.htm"&gt;DETER.VLX from DotSoft&lt;/a&gt; is one I know of).&lt;br /&gt;&lt;br /&gt;There are solutions, but they always require changes in the workflow process that involve difficult tradeoffs and careful evaluation of what is technically feasible and practical versus the costs of implementing the changes. There is no such thing as installing a single piece of software to instantly solve the problem. If you are looking for ways to protect intellectual property in your drawing files, don&amp;rsquo;t be fooled by snake oil security vendors.&lt;br /&gt;&lt;br /&gt;Disclaimer: One of my hats is the president of &lt;a href="http://www.cadlock.com/"&gt;CADLock, Inc.&lt;/a&gt;, makers of &lt;a href="http://www.cadlock.com/products/CADVault/"&gt;CADVault for AutoCAD&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>OpenDCL Quick Intro</title><link>http://www.manusoft.com/archive/blog/opendcl-quick-intro/</link><pubDate>Sun, 24 Aug 2008 14:42:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/opendcl-quick-intro/</guid><description>&lt;p&gt;If you&amp;rsquo;re an AutoLISP programmer, you&amp;rsquo;ve probably heard about &lt;a href="http://www.opendcl.com/"&gt;OpenDCL&lt;/a&gt;. Maybe you&amp;rsquo;ve even checked it out, but it looked complicated and you weren&amp;rsquo;t sure whether it was worth the trouble to learn how to use it. Either way, do yourself a favor and spend 10 minutes to go through the following 10-step quick introduction to OpenDCL.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=187950&amp;amp;package_id=220267&amp;amp;release_id=570817"&gt;Download&lt;/a&gt; and install OpenDCL Studio. Select the latest version in your desired language (ENU in the filename means US English). The download is an .msi file that can be cleanly uninstalled afterward.&lt;/li&gt;&lt;li&gt;Start AutoCAD (2004 or later). Use the APPLOAD command to load _MasterDemo.lsp from the OpenDCL Studio samples folder (it will be located in a language subfolder of the main OpenDCL Studio folder). When you close the APPLOAD dialog, the OpenDCL &amp;lsquo;MasterDemo&amp;rsquo; dockable form will appear.&lt;/li&gt;&lt;li&gt;Click on the [ListView] button to run the ListView sample. The ListView sample is very simple and will demonstrate some basic principles of OpenDCL. Leave it running as you proceed through the following steps.&lt;/li&gt;&lt;li&gt;Locate and open ListView.lsp in the OpenDCL Studio samples folder. ListView.lsp contains all the code for the ListView sample. Look for the c:ListViewDlg_Close_Clicked function defined near the end of that file. That function is called an &amp;ldquo;event handler&amp;rdquo;, and it is the lisp function that is executed when the [Close] button is pressed. The event handler for the [Close] button simply closes the dialog. The c:ListViewDlg_OnInitialize event handler function initializes the controls on the dialog before it is displayed.&lt;/li&gt;&lt;li&gt;Locate and open ListView.odcl in the OpenDCL Studio samples folder. Files with an .odcl extension can be opened and edited in OpenDCL Studio. OpenDCL Studio is used to design the user interface elements in an OpenDCL project. In the project tree pane, open the &amp;lsquo;Modal Forms&amp;rsquo; folder, then double click on ListViewDlg. The ListView form will be displayed in design mode.&lt;/li&gt;&lt;li&gt;Click on the [Close] button on the ListView form. In the font toolbar at the top of the editor, press the [B] button to make the font bold. Notice that the button&amp;rsquo;s caption becomes bold. In the &amp;lsquo;Properties&amp;rsquo; pane, double click on the &amp;lsquo;Height&amp;rsquo; property value and change it to 20. Press [Enter] to apply the new value. Use your mouse to drag the bottom of the button in design view to resize it dynamically.&lt;/li&gt;&lt;li&gt;Leaving OpenDCL Studio open, switch back to AutoCAD. Resize the ListView dialog, and notice how the controls it contains are also resized. Now switch back to OpenDCL Studio, make sure the [Close] button is selected, then click in the right column of the &amp;lsquo;(Wizard)&amp;rsquo; property in the Properties pane (or right click on the button control and select &amp;lsquo;Properties&amp;rsquo; in the control&amp;rsquo;s context menu). In the Control Properties Wizard, the Geometry tab shows that the button&amp;rsquo;s &amp;ldquo;Left Side Alignment&amp;rdquo; has been set to &amp;ldquo;Offset From Center of Dialog&amp;rdquo; and it&amp;rsquo;s &amp;ldquo;Top Side Alignment&amp;rdquo; has been set to &amp;ldquo;Offset From Bottom Edge&amp;rdquo;. Once these properties are set, no additional code is needed for the control to react correctly when the dialog is resized.&lt;/li&gt;&lt;li&gt;Exit AutoCAD, then restart. Enter the OPENDCL command. This command demand-loads the OpenDCL Runtime using AutoCAD demand loading mechanism. The OpenDCL Runtime must be loaded before the OpenDCL functions will work. The OpenDCL Studio installation includes OpenDCL Runtime, so it already exists on your computer.&lt;/li&gt;&lt;li&gt;If you are developing an application for use by others, you&amp;rsquo;ll need to download and distribute the &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=187950&amp;amp;package_id=219635&amp;amp;release_id=571922"&gt;OpenDCL Runtime&lt;/a&gt; along with your application. This is best done by incorporating the OpenDCL Runtime merge module for your language directly into your own application&amp;rsquo;s installation script. Alternatively, you can distribute the standalone OpenDCL Runtime .msi file for your language, or publish the URL where end users can download the latest version.&lt;/li&gt;&lt;li&gt;Switch back to OpenDCL Studio and double click on the [Close] button control. Intelligent help displays all the properties, methods, and events of the selected control, including their AutoLISP syntax. Click on a property, method, or event in the left pane to see detailed information for it.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Once you complete these ten steps, you are only a few minutes away from creating a fully functional OpenDCL application. Give it a try!&lt;/p&gt;</description></item><item><title>Debugging ObjectARX: Break on Exception</title><link>http://www.manusoft.com/archive/blog/debugging-objectarx-break-on-exception/</link><pubDate>Mon, 12 May 2008 11:11:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/debugging-objectarx-break-on-exception/</guid><description>&lt;p&gt;I have presented a class entitled High Octane ObjectARX at &lt;a href="http://au.autodesk.com/event/"&gt;Autodesk University&lt;/a&gt; the past two years. In 2006 the focus was on project organization, and last year I focused more on techniques for supporting multiple versions of AutoCAD with a single Visual Studio solution, touching briefly on testing and profiling. For 2008 I plan to focus on debugging.&lt;/p&gt;</description></item><item><title>The Day the ObjectARX SDK Died</title><link>http://www.manusoft.com/archive/blog/day-objectarx-sdk-died/</link><pubDate>Thu, 27 Mar 2008 15:09:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/day-objectarx-sdk-died/</guid><description>&lt;p&gt;Like &lt;a href="http://en.wikipedia.org/wiki/The_Day_the_Music_Died"&gt;that day almost 50 years ago&lt;/a&gt;, could today be the day that ObjectARX has died?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There have been a &lt;a href="http://discussion.autodesk.com/thread.jspa?threadID=652855"&gt;flurry of posts&lt;/a&gt; in the ObjectARX discussion group about problems downloading the new ObjectARX 2009 SDK. At first I dismissed the problems as new release hiccups, and expected things to get resolved in short order. Seeing that there were no new complaints this morning, I headed over to &lt;a href="http://www.objectarx.com/"&gt;http://www.objectarx.com/&lt;/a&gt; to download the new ObjectARX 2009 SDK. Instead of the new ObjectARX 2009 SDK, I received the following:&lt;br /&gt;&lt;a href="http://otb.manusoft.com/files/SDK_Request.png"&gt;&lt;img style="CURSOR: hand" alt="" src="http://otb.manusoft.com/files/SDK_Request.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Blog Posts Immortalized</title><link>http://www.manusoft.com/archive/blog/blog-posts-immortalized/</link><pubDate>Sat, 15 Dec 2007 19:18:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/blog-posts-immortalized/</guid><description>&lt;p&gt;I&amp;rsquo;ve created a compendium of two previous series of blog posts on my web site for posterity (and easier reading):&lt;br /&gt;&lt;a href="http://www.manusoft.com/resources/digest/cmswebsite.html"&gt;I&amp;rsquo;ll take web sites for $200, Alex&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.manusoft.com/resources/digest/digitalsig.html"&gt;Digital Signatures in the CAD Industry&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Digital Signatures: Under the Hood</title><link>http://www.manusoft.com/archive/blog/digital-signatures-under-hood/</link><pubDate>Mon, 10 Dec 2007 21:15:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/digital-signatures-under-hood/</guid><description>&lt;p&gt;The basic requirements of a digital signature are that it must uniquely identify the signatory, it must be independently verifiable, and it must be invalidated if the signed data has changed. To understand how these objectives are achieved, let&amp;rsquo;s start with the foundation of modern digital signature technology: public key encryption and the &lt;a href="http://en.wikipedia.org/wiki/Public_key_infrastructure"&gt;public key infrastructure&lt;/a&gt;, or PKI.&lt;br /&gt;&lt;br /&gt;In public key encryption, a &amp;ldquo;key pair&amp;rdquo; consists of two parts: a public key and a private key. In simplistic terms, the public key is mathematically derived from the randomly generated private key using an algorithm known as a &amp;ldquo;one way function&amp;rdquo;. A one way function makes it easy to calculate a public key if the private key is known, but extremely difficult to deduce the private key if the public key is known. The end result is a secret private key and an openly shared public key that are mathematically related in such a way that the public key can be used to decrypt data that was encrypted with the private key, and the private key can be used to decrypt data that was encrypted with the public key.&lt;br /&gt;&lt;br /&gt;This interesting property of such a key pair gives rise to a number of useful capabilities. In the case of digital signatures, the act of signing data is essentially nothing more complicated than encrypting the data with a private key. If the data can be decrypted successfully with the signer&amp;rsquo;s public key, then only the signer&amp;rsquo;s private key could have been used to do the encrypting. In practice, this process is simplified so that the signer encrypts only a secure hash, or checksum, of the data to be signed. The recipient then calculates the hash from the raw data and compares the result with the &amp;ldquo;signed&amp;rdquo; hash after it is decrypted. If the values match, the digital signature and data are validated.&lt;br /&gt;&lt;br /&gt;For this process to work properly, there need to be standard ways to package information about the algorithms used, and to provide important information about the keys themselves. This need is fulfilled by digital certificates. A digital certificate is a file or block of memory containing a public key along with ancillary data about the key and its owner. The certificate is itself digitally signed by the entity, usually a mutually trusted third party, that issued the certificate. This enables users to verify that the public key is valid and trustworthy.&lt;br /&gt;&lt;br /&gt;A digital ID is the private key component of a key pair. Normally the private key is not stored together with the public key, but instead is stored in a separate physical location for security, usually requiring a password to access it. A key manager maintains links between the digital certificate and its associated private key. In many cases, it is convenient to use the term &amp;ldquo;digital ID&amp;rdquo; to mean both the public and private keys, even though they are physically separated.&lt;br /&gt;&lt;br /&gt;It is almost always a good idea to time stamp digital signatures. Time stamping involves sending the digital signature to a time stamp authority, who then creates and returns a digitally signed time stamp that is uniquely and securely associated with the original digital signature. The time stamp can then be verified by third parties in the future by using exactly the same technique used to verify a digital signature.&lt;br /&gt;&lt;br /&gt;I think these important terms deserve a review. A &amp;ldquo;digital certificate&amp;rdquo; is a public key, which is itself digitally signed by a mutually trusted third party. Your digital certificate represents your public digital identity, and it should be made freely available to anyone who wants or needs it. A &amp;ldquo;digital ID&amp;rdquo; is a digital certificate &lt;strong&gt;and&lt;/strong&gt; the private key associated with the digital certificate. It isn&amp;rsquo;t difficult to create your own self-signed digital ID, but a digital ID is only as good as the issuing authority that signs it. When you purchase a digital ID from a third party like &lt;a href="http://www.verisign.com/"&gt;VeriSign&lt;/a&gt; or &lt;a href="http://www.thawte.com/"&gt;Thawte&lt;/a&gt;, their reputation makes your digital ID more trustworthy.&lt;/p&gt;</description></item><item><title>AU 2007 Post Mortem</title><link>http://www.manusoft.com/archive/blog/au-2007-post-mortem/</link><pubDate>Mon, 03 Dec 2007 15:12:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/au-2007-post-mortem/</guid><description>&lt;p&gt;The Hot List&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Carl Bass munching on fast food in the food court, and spotted throughout the week yakking with average folks in the halls.&lt;/li&gt;&lt;li&gt;Staggered classes reduced the lunchtime crush experienced at AU 2006.&lt;/li&gt;&lt;li&gt;More ObjectARX programming classes this year. I&amp;rsquo;m pushing for creating a new &amp;ldquo;Developer&amp;rdquo; track for AU 2008.&lt;/li&gt;&lt;li&gt;The &lt;a href="http://www.flickr.com/photos/btl/2077673044/"&gt;Matt Murphy Head&lt;/a&gt; (peace be upon him).&lt;/li&gt;&lt;li&gt;Meeting a lot of familiar faces and a few new ones!&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The Cold List&lt;/p&gt;</description></item><item><title>VC Build Hook utility for Visual Studio 2008</title><link>http://www.manusoft.com/archive/blog/vc-build-hook-utility-for-visual-studio/</link><pubDate>Mon, 26 Nov 2007 02:27:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/vc-build-hook-utility-for-visual-studio/</guid><description>&lt;p&gt;The new&lt;a href="http://msdn2.microsoft.com/vs2008/products/"&gt; Visual Studio 2008&lt;/a&gt; has been released, and to celebrate, I&amp;rsquo;ve updated &lt;a href="http://www.manusoft.com/resources/arxtips/vcbuildhook.html"&gt;VC Build Hook&lt;/a&gt;. The updated utility allows you to use the new IDE while still building with older versions of the build tools.&lt;br /&gt;&lt;br /&gt;Why is this necessary? If you build your AutoCAD 2007/2008 ObjectARX application with the Visual C/C++ 9.0 tools, AutoCAD will display a warning message about an incompatible module when you try to load it. You can use VC Build Hook to target all previous AutoCAD versions from a single Visual Studio 2008 solution (if you have the correct version of Visual C/C++ installed alongside Visual Studio 2008).&lt;br /&gt;&lt;br /&gt;In my testing so far, existing Visual Studio 2005 projects build without problems in Visual Studio 2008 when VC Build Hook is installed and the new &amp;lsquo;BuildToolVersion&amp;rsquo; property is set to the correct version.&lt;/p&gt;</description></item><item><title>OpenDCL 4.1 Released</title><link>http://www.manusoft.com/archive/blog/opendcl-41-released/</link><pubDate>Wed, 21 Nov 2007 10:50:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/opendcl-41-released/</guid><description>&lt;p&gt;&lt;a href="http://www.opendcl.com"&gt;OpenDCL 4.1&lt;/a&gt; adds support for the AutoCAD 2008 64-bit platform, includes many improvements in the OpenDCL Studio editor, and has a completely rewritten grid control.&lt;br /&gt;&lt;br /&gt;Next on the agenda is adding support for localization so that local language translations can be easily created.&lt;/p&gt;</description></item><item><title>AutoCAD 2008 Slow Startup Fix</title><link>http://www.manusoft.com/archive/blog/autocad-2008-slow-startup-fix/</link><pubDate>Thu, 06 Sep 2007 15:54:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/autocad-2008-slow-startup-fix/</guid><description>&lt;p&gt;&lt;em&gt;[Update: See &lt;a href="http://otb.manusoft.com/2010/11/disable-autocad-infocenter.htm"&gt;Disable AutoCAD InfoCenter&lt;/a&gt;]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve noticed more frequent posts in the Autodesk discussion groups about slow startup problems since AutoCAD 2008 was released, and I have the same problem on my development system. Part of the problem is .NET loading, due to the new .NET gadgets like the dashboard palette. Another long running startup hassle is the communication center (WSCommCntr1.exe if you check running processes in task manager) that Autodesk products use to call home.&lt;/p&gt;</description></item><item><title>OpenDCL 4.0 Debuts</title><link>http://www.manusoft.com/archive/blog/opendcl-40-debuts/</link><pubDate>Wed, 01 Aug 2007 09:51:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/opendcl-40-debuts/</guid><description>&lt;p&gt;OpenDCL 4.0 has finally been released. If you&amp;rsquo;re not familiar with OpenDCL, check it out at &lt;a href="http://www.opendcl.com"&gt;&lt;a href="https://www.opendcl.com"&gt;www.opendcl.com&lt;/a&gt;&lt;/a&gt;, or on SourceForge at &lt;a href="http://sourceforge.net/projects/opendcl/"&gt;sourceforge.net/projects/opendcl&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;OpenDCL, based on the original commercial ObjectDCL software by Chad Wanless, is a modern replacement for the old DCL dialog control language in AutoCAD. The current OpenDCL Runtime supports AutoCAD 2002 through 2008 (except AutoCAD 2008 x64). It is designed to give AutoCAD end users and AutoLISP application developers a simple yet powerful way to design and use rich user interfaces in their applications.&lt;br /&gt;&lt;br /&gt;The goal for version 4.0 was to get it stable and fix all the bugs, with minimal new feature development. OpenDCL 4.1 will add support for AutoCAD 2008 x64. After that we will start working on localized language versions, and adding new features.&lt;br /&gt;&lt;br /&gt;OpenDCL is licensed under the &lt;a href="http://www.gnu.org/licenses/licenses.html#GPL"&gt;GNU General Public License&lt;/a&gt; (GNU GPL) open source license, completely free to use, and source code is available on SourceForge.&lt;/p&gt;</description></item><item><title>What time is it?</title><link>http://www.manusoft.com/archive/blog/what-time-is-it/</link><pubDate>Thu, 21 Jun 2007 20:13:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/what-time-is-it/</guid><description>&lt;p&gt;AutoCAD 2004 introduced the ability to digitally sign drawing files when they are saved, but very few people use this feature. Even fewer use the time stamp feature that goes along with it. Time stamping a digital signature is important when it&amp;rsquo;s not only important to know &lt;em&gt;who&lt;/em&gt; signed it, but also &lt;em&gt;when&lt;/em&gt; they signed it.&lt;br /&gt;&lt;br /&gt;For time stamping to be reliable and trustworthy, you need an independent (and trustworthy) third party to provide the time stamp, along with a verifiable receipt so that anyone can verify the authenticity of a claimed time stamp in the event of a future dispute.&lt;br /&gt;&lt;br /&gt;Since the inception of the digital signature feature, AutoCAD has included three default time servers for this purpose. Unfortunately, none of the three are accessible any more. If you need to digitally sign drawing files with a time stamp, you&amp;rsquo;ll have to modify this list of time servers.&lt;br /&gt;&lt;br /&gt;The list of time servers is maintained in a file named timesrvr.txt in the AutoCAD installation folder. You can edit the file with notepad, and the format is obvious and straightforward when you view the file.&lt;br /&gt;&lt;br /&gt;If you just want to play around with time stamps, try adding the following to the end of the file (you do not need to restart AutoCAD to see the new servers):&lt;br /&gt;NIST A [Maryland] (time-a.nist.gov)&lt;br /&gt;NIST B [Maryland] (time-b.nist.gov)&lt;br /&gt;&lt;br /&gt;As of this writing, both of these NIST servers are available and working, but you get what you pay for. For officially incorporating time stamped digital signatures into your workflow, I recommend subscribing to a commercial time service with guaranteed uptime and a web based time stamp verification console. I can&amp;rsquo;t recommend one, because I have never used a commercial time service myself, but a good place to start is the list of public time servers maintained by &lt;a href="http://www.ntp.org"&gt;NTP.org&lt;/a&gt; at &lt;a href="http://support.ntp.org/bin/view/Servers/"&gt;&lt;a href="http://support.ntp.org/bin/view/Servers/"&gt;http://support.ntp.org/bin/view/Servers/&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Visual Studio Build Configuration Tip</title><link>http://www.manusoft.com/archive/blog/visual-studio-build-configuration-tip/</link><pubDate>Fri, 15 Jun 2007 12:30:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/visual-studio-build-configuration-tip/</guid><description>&lt;p&gt;I&amp;rsquo;ve received several emails recently from users of my &lt;a href="http://www.manusoft.com/resources/arxtips/vcbuildhook.html"&gt;VC Build Hook utility&lt;/a&gt; that mention switching the &amp;lsquo;UseVC7Paths&amp;rsquo; setting on and off depending on the build configuration they are working on. If you are doing this, you need to change your project structure!&lt;/p&gt;</description></item><item><title>Introducing OpenDCL for AutoCAD</title><link>http://www.manusoft.com/archive/blog/introducing-opendcl-for-autocad/</link><pubDate>Wed, 31 Jan 2007 19:44:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/introducing-opendcl-for-autocad/</guid><description>&lt;p&gt;AutoLISP programmers may remember a product named ObjectDCL, by 3rd Day Software. ObjectDCL was &lt;a href="http://www.cadopolis.com/autocad/objectdcl-now-open-source-project-.shtml"&gt;released as open source in the summer of 2006&lt;/a&gt; by developer Chad Wanless due to his inability to continue supporting the software because of &amp;ldquo;health reasons&amp;rdquo;. At the time, many users of ObjectDCL hoped that someone would update the code to work in AutoCAD 2007. Programmer David Robison did some work to get AutoCAD 2007 supported, but the project has been languishing, almost to the point of extinction.&lt;br /&gt;&lt;br /&gt;After being asked by several ObjectDCL users whether I could help, I decided a few weeks ago to contribute to the community by getting the original C++ code updated to support AutoCAD 2007. As I am wont to do, I&amp;rsquo;ve ended up re-architecting much of the code in the process.&lt;br /&gt;&lt;br /&gt;The results of my work are available now at the new &lt;a href="http://sourceforge.net/projects/opendcl"&gt;OpenDCL project&lt;/a&gt; on SourceForge. The new 4.0 release is still in the alpha testing phase. If you program in AutoLISP and want to create rich user interfaces for your applications, check it out!&lt;/p&gt;</description></item><item><title>I'll take web sites for $200, Alex: Part IV</title><link>http://www.manusoft.com/archive/blog/ill-take-web-sites-for-200-alex-part-iv/</link><pubDate>Wed, 17 Jan 2007 01:38:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/ill-take-web-sites-for-200-alex-part-iv/</guid><description>&lt;p&gt;(continued from &lt;a href="http://otb.manusoft.com/2007/01/ill-take-web-sites-for-200-alex-part-iii.htm"&gt;Part III&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;Creating custom modules for &lt;a href="http://www.dotnetnuke.com/"&gt;DotNetNuke&lt;/a&gt; is an esoteric process that I don't recommend unless you're prepared to invest quite a bit of time and effort. I slogged through the process because I'm too stubborn to quit, but it's hardly worth the investment in time for a one-off custom module. I don't expect many of my readers to try it anyway, so I won't bother describing the technical aspects in any detail.&lt;/p&gt;</description></item><item><title>I'll take web sites for $200, Alex: Part III</title><link>http://www.manusoft.com/archive/blog/ill-take-web-sites-for-200-alex-part-iii/</link><pubDate>Fri, 12 Jan 2007 23:20:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/ill-take-web-sites-for-200-alex-part-iii/</guid><description>&lt;p&gt;(continued from &lt;a href="http://otb.manusoft.com/2007/01/ill-take-web-sites-for-200-alex-part-ii.htm"&gt;Part II&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;DotNetNuke (aka DNN) is not simple to set up. It needs at least the free &lt;a href="http://www.microsoft.com/sql/editions/express/default.mspx"&gt;SQL Server Express Edition&lt;/a&gt; on the host system (full SQL Server requires some changes to the default configuration) and either IIS or another ASP .NET 2.0 compatible web server to run on. If you have Visual Studio 2005 fully installed, you have all you need to run DNN.&lt;/p&gt;</description></item><item><title>My ManuSoft manifest manifesto</title><link>http://www.manusoft.com/archive/blog/my-manusoft-manifest-manifesto/</link><pubDate>Thu, 11 Jan 2007 13:10:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/my-manusoft-manifest-manifesto/</guid><description>&lt;p&gt;With the advent of Visual Studio 2005 and automatically generated manifest files, the topic of when and how to use manifest files comes up occasionally. Since a default ObjectARX wizard generated project in Visual Studio 2005 generates an embedded manifest by default, most people don&amp;rsquo;t even think about it. Of course that was the whole idea &amp;ndash; the manifest would ensure that the correct dependent DLLs get loaded, and voila, no &lt;em&gt;need&lt;/em&gt; to think about it. One of my programming axioms applies in this case: &lt;a href="http://en.wikipedia.org/wiki/TANSTAAFL"&gt;TANSTAAFL&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The problem is that ObjectARX applications are not in charge. AutoCAD is in charge, and it will decide which VC runtime and MFC runtime DLLs to load. If your ObjectARX application loads a different VC or MFC runtime than the ones AutoCAD is using, you&amp;rsquo;ll encounter big problems. I&amp;rsquo;ve always advised disabling the manifest completely (see my &lt;a href="http://www.manusoft.com/resources/arxtips/vcbuildhook.html"&gt;ObjectARX Tips&lt;/a&gt; page) to avoid such a possibility. Unfortunately, there&amp;rsquo;s a catch.&lt;br /&gt;&lt;br /&gt;The problem is that linking to the ATL80.DLL file isn&amp;rsquo;t possible by just disabling the manifest and doing nothing more. ATL is now a side-by-side (SxS) assembly, and it no longer lives on the Windows support path, so a standard un-manifested DLL won&amp;rsquo;t be able to find it. The preferred solution is to link statically to ATL (see Configuration -&amp;gt; General -&amp;gt; &amp;lsquo;Use of ATL&amp;rsquo; in VS 2005 project properties) and avoid the problem altogether. If you only have one module that uses ATL, this is always the best solution.&lt;br /&gt;&lt;br /&gt;The less desirable solution is to add a &lt;strong&gt;&lt;em&gt;manually-created&lt;/em&gt;&lt;/strong&gt; manifest that specifies the desired ATL SxS assembly, but ignores the VC and MFC runtime DLLs. You&amp;rsquo;ll still need to decide whether to make ATL &lt;a href="http://msdn2.microsoft.com/en-us/library/ms235531.aspx"&gt;shared or private&lt;/a&gt;, and in either case you &lt;strong&gt;&lt;em&gt;must&lt;/em&gt;&lt;/strong&gt; &lt;a href="http://msdn2.microsoft.com/en-us/library/ms235299(VS.80).aspx"&gt;distribute ATL with your application&lt;/a&gt; to ensure that it is available when your application is deployed. You can cheat, and let VS generate your manifest file (instruct it to &lt;strong&gt;&lt;em&gt;not&lt;/em&gt;&lt;/strong&gt; embed the file), then just edit the resulting .manifest file to remove references to the VC and MFC assemblies. For example, here&amp;rsquo;s one that I generated (you&amp;rsquo;ll need to generate your own to ensure that the manifest matches the version you are redistributing):&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&amp;lt;?xml version=&amp;ldquo;1.0&amp;rdquo; encoding=&amp;ldquo;UTF-8&amp;rdquo; standalone=&amp;ldquo;yes&amp;rdquo;?&amp;gt;&lt;br /&gt; &amp;lt;assembly xmlns=&amp;ldquo;urn:schemas-microsoft-com:asm.v1&amp;rdquo; manifestversion=&amp;ldquo;1.0&amp;rdquo;&amp;gt;&lt;br /&gt; &amp;lt;dependency&amp;gt;&lt;br /&gt; &amp;lt;dependentassembly&amp;gt;&lt;br /&gt; &amp;lt;assemblyidentity type=&amp;ldquo;win32&amp;rdquo; name=&amp;ldquo;Microsoft.VC80.ATL&amp;rdquo; version=&amp;ldquo;8.0.50727.762&amp;rdquo; processorarchitecture=&amp;ldquo;x86&amp;rdquo; publickeytoken=&amp;ldquo;1fc8b3b9a1e18e3b&amp;rdquo;&amp;gt;&lt;br /&gt;&amp;lt;/assemblyidentity&amp;gt;&lt;br /&gt; &amp;lt;/dependentassembly&amp;gt;&lt;br /&gt; &amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;lt;/assembly&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;In my work, I&amp;rsquo;ve had very little need for manifests. The VC optimizer is able to strip the unused portions of statically linked ATL out of your code, leaving a much smaller footprint than the entire assembly would require. This eliminates the need to redistribute ATL with your application, thus reducing the overall potential for deployment issues. Nevertheless, there are exceptions to every rule, and your mileage may vary.&lt;/p&gt;</description></item><item><title>I'll take web sites for $200, Alex: Part II</title><link>http://www.manusoft.com/archive/blog/ill-take-web-sites-for-200-alex-part-ii/</link><pubDate>Thu, 11 Jan 2007 01:41:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/ill-take-web-sites-for-200-alex-part-ii/</guid><description>&lt;p&gt;(continued from &lt;a href="http://otb.manusoft.com/2007/01/ill-take-web-sites-for-200-alex-part-i.htm"&gt;Part I&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;The kind of web site I wanted to create is usually built on top of a &lt;a href="http://en.wikipedia.org/wiki/Comparison_of_content_management_systems"&gt;Content Management System&lt;/a&gt; (CMS) that becomes the administrative user interface as well as the framework for web pages that get served to web site visitors. The first thing I learned is that there are &lt;em&gt;thousands&lt;/em&gt; of CMS products floating about the internet, from simple &amp;ldquo;guest book&amp;rdquo; type scripts to full blown corporate extranet management systems designed for use by tens of thousands of employees and customers. I&amp;rsquo;ve also been looking for an excuse to learn ASP.NET, so I decided to narrow my search to CMS software that was based on &lt;a href="http://asp.net/"&gt;ASP.NET&lt;/a&gt;. Finally, the software had to be free or very inexpensive.&lt;/p&gt;</description></item><item><title>I'll take web sites for $200, Alex: Part I</title><link>http://www.manusoft.com/archive/blog/ill-take-web-sites-for-200-alex-part-i/</link><pubDate>Mon, 08 Jan 2007 17:35:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/ill-take-web-sites-for-200-alex-part-i/</guid><description>&lt;p&gt;I&amp;rsquo;m one of those throwbacks that learned HTML by typing it in Notepad. I&amp;rsquo;ve since moved up to using the &lt;a href="http://msdn.microsoft.com/vstudio/"&gt;Visual Studio&lt;/a&gt; editor; it does syntax coloring, error highlighting, and has a &amp;ldquo;design&amp;rdquo; mode for previewing the page, yet it&amp;rsquo;s a very utilitarian editor that I feel comfortable with. I do use &lt;a href="http://en.wikipedia.org/wiki/Microsoft_FrontPage"&gt;FrontPage&lt;/a&gt; when I need to manage connections between multiple HTML pages, but mostly in raw HTML mode. When I use &lt;a href="http://en.wikipedia.org/wiki/WYSIWYG"&gt;WYSIWYG&lt;/a&gt; design mode in FrontPage, I inevitably end up cleaning out a lot of unnecessary junk that it includes in the generated HTML. I think it&amp;rsquo;s fair to say that my obsession with clean HTML results in utilitarian, functional, and standards conformant presentations &amp;ndash; but with a decided lack of graphic appeal.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.manusoft.com/"&gt;ManuSoft&lt;/a&gt; and &lt;a href="http://www.cadlock.com/"&gt;CADLock&lt;/a&gt; web sites are examples of this utilitarian approach. The ManuSoft site uses no fancy graphics and relies very little on client side scripting, and it supports a hierarchical navigation system using only standard hyperlinks. I like that minimalist approach, but the price for clean HTML being served to clients is a lot of work on the server to maintain the site. As a result, I don&amp;rsquo;t update the site very often because it&amp;rsquo;s just too difficult.&lt;br /&gt;&lt;br /&gt;This blog was the first step toward realizing a goal of making it easier to add new content. After all, the raison d&amp;rsquo;être of blogs is to minimize the latency between the writer&amp;rsquo;s stream of consciousness and words on the web by making it irresistibly easy to add new content. This is precisely why blogs have become so popular.&lt;br /&gt;&lt;br /&gt;Unfortunately, I soon found limitations with my blog. Tabular lists of data still require manual HTML input, it is difficult to customize the content area outside the individual posts on the blog page, and most aspects of the hosted blog software are outside my control. I wanted more.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.cadcourt.com/"&gt;Autodesk vs. Open Design Alliance lawsuit&lt;/a&gt; gave me an excuse to take the next step: implement the &amp;ldquo;blog&amp;rdquo; concept across an entire web site with software that I control. So, I decided to swallow my pride and learn how to create an entire web site that would be so easy to update that I would actually update it frequently &amp;ndash; even if it meant messy HTML code. Stay tuned for Part II, choosing a hosting service and deciding which software to use.&lt;/p&gt;</description></item><item><title>VCBuildHook updated for VS 2005 SP1</title><link>http://www.manusoft.com/archive/blog/vcbuildhook-updated-for-vs-2005-sp1/</link><pubDate>Tue, 19 Dec 2006 17:13:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/vcbuildhook-updated-for-vs-2005-sp1/</guid><description>&lt;p&gt;I&amp;rsquo;ve installed &lt;a href="http://otb.manusoft.com/2006/12/visual-studio-2005-service-pack-1-is.htm"&gt;Visual Studio 2005 SP1&lt;/a&gt; and have been busy testing all my projects to make sure they didn&amp;rsquo;t break. &lt;a href="http://www.microsoft.com"&gt;Microsoft&lt;/a&gt; did fix at least one of the bugs I reported (the resource editor choked on resource strings that contained an embedded NULL character), but the IDE still crashes fairly consistently if I initiate a large solution build while the Intellisense database is being rebuilt. SP1 also managed to break my &lt;a href="http://www.manusoft.com/resources/arxtips/vcbuildhook.html"&gt;VCBuildHook utility&lt;/a&gt;, so I&amp;rsquo;ve uploaded an updated version (2.0.3.0) for use with SP1.&lt;/p&gt;</description></item><item><title>Visual Studio 2005 Service Pack 1 is here!</title><link>http://www.manusoft.com/archive/blog/visual-studio-2005-service-pack-1-is/</link><pubDate>Mon, 18 Dec 2006 16:51:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/visual-studio-2005-service-pack-1-is/</guid><description>&lt;p&gt;Finally, the long awaited &lt;a href="http://msdn.microsoft.com/vstudio/support/vs2005sp1"&gt;service pack 1 for Visual Studio 2005&lt;/a&gt; is released! The service pack has been in the pipeline since soon after Visual Studio 2005 shipped last November, with release dates slipping month after month. The latest official release date was announced as &amp;ldquo;early 2007&amp;rdquo;. Perhaps this was an intentional attempt to alleviate some of the waiting pains with a suprise release (or maybe just the Microsoft rumor mill on autopilot).&lt;br /&gt;&lt;br /&gt;Be prepared for a long install. The download page warns that it could take an hour or more to verify digital signatures before the service pack installation even begins.&lt;/p&gt;</description></item><item><title>Visual Studio Version Hunt</title><link>http://www.manusoft.com/archive/blog/visual-studio-version-hunt/</link><pubDate>Fri, 08 Dec 2006 20:06:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/visual-studio-version-hunt/</guid><description>&lt;p&gt;If you&amp;rsquo;ve been programming with ObjectARX for a while, you already know that each version of the &lt;a href="http://www.objectarx.com/"&gt;ObjectARX SDK&lt;/a&gt; only works with a specific version of &lt;a href="http://msdn.microsoft.com/vstudio/"&gt;Visual Studio&lt;/a&gt;. Mazhar Basa touches on the subject in his article &lt;a href="http://www.dailyautocad.com/objectarx/components-of-objectarx-applications/"&gt;Components of ObjectARX Applications&lt;/a&gt;. My &lt;a href="http://www.manusoft.com/resources/arxtips/vcbuildhook.html"&gt;VCBuildHook utility&lt;/a&gt; makes it possible to build for multiple target AutoCAD versions from a single Visual Studio 2005 solution, but this utility still needs the older versions of Visual Studio to be installed on the same system in order to perform its magic.&lt;br /&gt;&lt;br /&gt;The problem is, legitimate licenses of older versions of Visual Studio are hard to come by. Back in the Visual Studio .NET 2003 days, you could purchase a new license of VS 2003, then get a free license downgrade from Microsoft that allowed you to install Visual Studio 2002 side by side on the same system. That combination allowed you to target AutoCAD versions as far back as AutoCAD 2004. Unfortunately, Microsoft stopped offering the VS 2002 downgrade license when Visual Studio 2005 began shipping in November of 2006.&lt;br /&gt;&lt;br /&gt;The end result is that new ObjectARX programmers are faced with a dilemma if they need to target anything older than AutoCAD 2007. One of the attendees at my &amp;ldquo;High-Octane ObjectARX&amp;rdquo; class at &lt;a href="http://au.autodesk.com/"&gt;AU 2006&lt;/a&gt; reminded me that &lt;a href="http://msdn.microsoft.com/"&gt;MSDN&lt;/a&gt; (Microsoft Developer Network) members can download older versions of Visual Studio from the MSDN subscriber download center.&lt;br /&gt;&lt;br /&gt;I have verified that Visual Studio .NET 2002 (VS 2002) is available for download to MSDN Professional subscribers, but I could not find Visual Studio 6.0, which is required to target AutoCAD 2000 - 2002. Visual Studio 4.2 (required for AutoCAD R14) is available though, so maybe I&amp;rsquo;m just not looking in the right place.&lt;br /&gt;&lt;br /&gt;If you are a professional software developer, whether commercial or in-house, you should consider subscribing to &lt;a href="http://msdn.microsoft.com/"&gt;MSDN&lt;/a&gt; for various reasons. If you&amp;rsquo;re an ObjectARX programmer and need to target older versions of AutoCAD, MSDN may be the only way to obtain the older Visual Studio build tools and libraries that you&amp;rsquo;ll need.&lt;/p&gt;</description></item><item><title>Demand Loading a VLX File</title><link>http://www.manusoft.com/archive/blog/demand-loading-vlx-file/</link><pubDate>Mon, 04 Dec 2006 18:34:00 +0000</pubDate><guid>http://www.manusoft.com/archive/blog/demand-loading-vlx-file/</guid><description>&lt;p&gt;Some years ago I wrote a small ObjectARX module named VLXLoad that loads a .vlx file of the same name and in the same directory as the .arx module. I never claimed credit for the utility, but now that I&amp;rsquo;ve &lt;a href="http://www.manusoft.com/resources/arxtips/demandloadvlx.html"&gt;released the source code&lt;/a&gt;, I guess I&amp;rsquo;ll have to own up to it.&lt;/p&gt;</description></item></channel></rss>