tools and technologies for Microsoft Windows software development


Welcome to, a.k.a. the personal home page of Shawn A. Van Ness, friendly neighborhood software engineer.  This site is dedicated to making your Windows software development life easier, by providing quality shareware tools, components, and source code -- all for free.
All of the software on this site is available free of charge (although donations are gladly accepted ;-) and most of it includes free source code, as well.  Enjoy!


I've just started a new weblog on, in order to avoid subjecting everyone on my favorite mailing list to my many random, unprovoked rants.  The RSS feed is here.


.NET:  Strongly-typed Collection Generator for C#
tired of waiting for Microsoft to add generics to your new favorite language?  it's time to experience the joy of X-Code .NET
(source included)


a friendly, debuggable replacement for RegSvr32.exe, RegTlb.exe, and more... a must-have for all COM development
(source included)
allows you to spy on the command lines that were used to start the various processes running on your system
(source included)
RSaR: Regex Search and Rescue
a .NET alternative to the lame regex interpreter in VS7's "Find in Files" feature
(source included)


Using NDoc: Adding World-Class Documentation to Your .NET Components
(The O'Reilly Network, Nov 2002)
Copying, Cloning, and Marshalling in .NET
(The O'Reilly Network, Nov 2002)
Generating Code at Run-time with Reflection.Emit
(Windows Developer Magazine, Aug 2002)


.NET:  Scraping HTML for fun and profit
it's amazing what one can do on a rainy sunday afternoon, with ~100 lines of C# code... like, say, grab HTML from, scrape the current date and time with a pair of simple regexes, then set the clock with a little p/invoke
.NET:  HiResTimer class
it's not rocket science, but it's amazing how often folks get this wrong (also available: C++ version)
.NET:  RegexMarshalByRefWrapper
regular expressions created with RegexOptions.Compiled will leak, unless they're housed in a secondary appdomain that can be unloaded -- you'll need this wrapper class, or something like it, to do that
ATL3: CComTSTR class
the ATL3 string conversion macros are ugly (at best) and pose terrible security holes (at worst) -- use a heap-based wrapper class instead (note: ATL7 offers similar functionality with their new CW2A, et. al., classes)
ATL3: CSimpleList template
as seen in Attila (note: ATL7 offers similar functionality with their new CAtlList template)
ATL3: CSimpleVector template
the ATL3 array template (CSimpleArray) is buggy and leaky -- don't use it (note: ATL7 finally repairs the bugs in CSimpleArray, and also offers a newer template, CAtlArray)
DCOM: PingRemoteHost function
use this helper function to "ping" a remote DCOM server, before calling CoCreateInstanceEx -- thus greatly mitigating the DCOM timeout problem (at least for activation requests)
Win32: ModelessDialogHook class
encapsulating reusable dialogs as components (in DLLs or in COM objects) is a great idea -- much better than trying to reuse a .rc file -- but things get tricky if you like your dialogs modeless


My day job:  Tablet PC application development
Is your organization making the move to Tablet PC?  If so, chances are you're going to need some custom software developed, before you can realize the true digital ink experience.  Here at Leszynski Group, we have more experience than anyone else, when it comes to developing ink applications for .NET and the Tablet PC platform:  from ink-enabling your legacy thinclient apps, to storing and querying ink on the data tier and developing custom recognition engines -- we are the undisputed industry leaders in Tablet application development.  (And it's a pretty nice day job.)


The .NET Guy

The ADO Guy
The APOD (just for something a little different)