Visual Studio Version Hunt

If you’ve been programming with ObjectARX for a while, you already know that each version of the ObjectARX SDK only works with a specific version of Visual Studio. Mazhar Basa touches on the subject in his article Components of ObjectARX Applications. My VCBuildHook utility 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.

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.

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 “High-Octane ObjectARX” class at AU 2006 reminded me that MSDN (Microsoft Developer Network) members can download older versions of Visual Studio from the MSDN subscriber download center.

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’m just not looking in the right place.

If you are a professional software developer, whether commercial or in-house, you should consider subscribing to MSDN for various reasons. If you’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’ll need.

Does Vista really open DWF files?

Not according to the press release. Vista (and .NET 3.0) includes a built-in XPS Viewer (also available for Windows XP SP2 and Windows Server 2003), which will view any XPS format file. Apparently Autodesk plans to add support for output to XPS format in the future, and this output will be called DWFx — a new file format. It’s not clear what the difference will be between DWFx and the output produced using the Microsoft XPS Document Writer that is already available.

I installed the Microsoft XPS Document Writer and XPS Viewer on my Windows XP SP2 machine. Next, I started AutoCAD 2007 and opened “3D House.dwg” from the Sample folder. I then plotted this file to DWF, PDF, and XPS, with the following results:

Plotter Plot Time File Size
DWF6 ePlot.pc3 7 seconds 139 kb
DWG To PDF.pc3 5 seconds 165 kb
Microsoft XPS Document Writer 34 seconds 829 kb

I’m not suggesting that these files all contain the same content, I’m merely suggesting that DWFx/XPS may have some undesirable tradeoffs in practice.

This whole issue about “native Vista support for DWF” may be nothing but smoke and mirrors. There is no guarantee that publishing CAD data in the XPS format will be efficient. So what will happen if users can choose between a compact DWF, a slightly less compact but ubiquitous PDF, or a very space-hungry DWFx? Time will tell, but I think this issue of DWF in Vista is getting way to much spin and not enough critical analysis.

Demand Loading a VLX File

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’ve released the source code, I guess I’ll have to own up to it.

If you’re interested in seeing an example of “dynamically” defining an ADS (lisp callable) function when an ObjectARX module loads, take a look at the VLXLoad source code. The code also demonstrates how to call the GetModuleFileName() WinAPI function to get the path of the executing module, and how to declare and use the undocumented ads_queueexpr() function.

There is no documentation (and probably no comments), so be warned. The download contains ready to build projects for Visual Studio 2002 (targeting AutoCAD 2004-2006) and Visual Studio 2005 (targeting AutoCAD 2007). These projects were both created with the corresponding ObjectARX wizard, and are included in the course materials for my “High-Octane ObjectARX” class at AU 2006 as an example of a simple (yet very useful) ObjectARX application.

If you just want to use VLXLoad, I’ve also made the original pre-built binaries available on my Freebies page. The idea is to rename the correct .arx file so it matches the name of your .vlx, then set up registry demand loading so that the .arx loads when AutoCAD starts. The .arx then loads the associated .vlx file, and voila, demand loading for .vlx files. Instructions for setting up demand loading have been posted on the ‘net in the past (and it is well documented in the ObjectARX SDK), so I won’t describe that here.

Have you made your mistake today?

It may seem strange to some of you, but I consider myself an artist. Visual Studio is my canvas, and the keyboard is my paintbrush. This is why I wouldn’t survive in a stuffy corporate environment with committees, red tape, and politics. I’m a visionary, not a software engineer. I don’t like to plan every little detail; I’d rather start with a grand vision and just let the code go wherever my vision leads it.

I confess this can be both a strength and a weakness. For example, I’ll spend two weeks refactoring perfectly working code because I don’t think it’s elegant enough. On the other hand, aesthetic beauty of structure and architecture is every bit as important in software as it is in other fields. It’s just that the benefits are intangible and more difficult to quantify.

Perfectly working code, you say? I admit, that’s a bit of a rarity these days. It’s a rarity precisely because not many programmers consider programming as an art form. Real artists are never satisfied with their work; they never stop working toward absolute perfection of both form and function.

This leads me to my real point. I have a favorite saying, “Have you made your mistake today?” Ironically, perfection can only be achieved by making mistakes. If you’re not making mistakes, you’re not learning. If you’re not learning, you’re not taking any risks. If you’re not taking any risks, you’re achieving mediocrity at best. Learn to make mistakes gracefully. Enjoy your capacity to learn and evolve toward perfection, no matter what kind of art you create.

Teaching and learning at AU

This year I taught an ObjectARX class at AU. As usual, there wasn’t nearly enough time to cover all the things I wanted to cover. I’m still contemplating what I want to do differently next year in order to be able to spend more time on the subject without boring everybody to death.

By the way, fellow programmers, do you agree that we need a Programming campus at AU 2007? I hate being lumped into a generic category like General Design. I suggest a new campus just for programmers, with our own industry reception (I’m thinking pizza, beer, and a Pink Floyd tribute band — and Lynn Allen of course).

If any of you went to the Programming Gurus Go Head To Head panel discussion on Thursday afternoon and were wondering why I wasn’t present… well, er, next time, could you please call me on my mobile phone a few minutes before the class to jog my aging memory? Sheesh. I always enjoy the quasi-chaotic gurus panel, and I can’t believe it completely slipped my mind.

Speaking of chaos, I like chaos — but more on that subject later. I like unscripted discussions where the topics are limited only by the imaginations of the participants. I usually sit in on a few classes at AU, but with a few rare exceptions, the only time I learn something new at AU is outside the structured classrooms.

This year I did learn something new in a class, though. I sat in on Josh Johnson’s Demystifying Installers class, and I learned how to create a new registry key that AutoCAD’s secondary install uses to trigger a third party secondary installer (this would occur when a new user logs in for the first time). Thanks, Josh! I did not know that! [An interesting sidenote: Josh taught the class with his father in the audience. How cool is that? Er, not cool at all, especially in Vegas! Seriously, I thought it was cool, and it was a pleasure to meet both of the Johnsons. Good thing I brought… never mind.]