Products, the Universe and Everything

The Riverblade Developer's Blog

Beth demonstrating Visual Lint at the ACCU Conference 2008  Anna taking part in a discussion panel at the European Software Conference 2007 

Welcome to our developer's blog. We hope that this forum provides an insight into us, our products and how we develop them. Please feel free to write to us if you have anything to add to any of the posts here.

Current Entries | Archives |

Visual Lint has been released
Saturday, March 31, 2007

We are happy to announce that Visual Lint has been released.

This is a major release, incorporating as it does a new installer, full support for Windows Vista and a multitude of changes from intervening development builds since (the last public release).

The following changes are included in this build:
  • Integrated a new installer built using InstallAware Studio (we previously used the installation builder supplied with Visual Studio, but we have outgrown its capabilities). This installer also addresses compatibility issues with Windows Vista.

  • Modified elements of the user interface for consistancy with Windows Vista. As part of this task most commonly seen message box prompts have been replaced with Vista style Task Dialogs, and the appearance and layout of the Manual Analysis Dialog, Registration Dialog and About Box have had been improved. In addition, all File Dialogs displayed by Visual Lint when running under Windows Vista are now the new style ones rather than the old style Windows 2000 ones displayed under Vista for legacy applications.

  • Project.lnt files are now by default written directly by Visual Lint rather than by PC-Lint. This avoids problems with MFC projects and the definitions of _AFXDLL and /MD[d] in MFC projects.

  • Added an option to the "Command Line" page to determine whether std.lnt or the project.lnt file should be located first on the command line. This can be important when files of the same name as SDK include files are referenced through project additional includes.

  • When a file is saved, any analysis tasks currently running on that file are now aborted to avoid parallel re-analysis tasks on the same file. Note that under VS2005, such analysis tasks are stopped prior to the file save being executed to avoid problems with file locking [IMS ID 141].

  • Added limited support (VS2002/VS2003) for Intel C++ compiler 9.1 (.icproj) projects (see

    Note that VS2005 cannot be supported in this way as EnvDTE::Project::GetObject() returns E_NOTIMPL for Intel compiler projects under VS2005. As this is a prerequisite for access to the entire Visual C++ automation model, we cannot support the Intel compiler under VS2005 until this deficiency is rectified. Note also that Under VS2002 and VS2003 minor deficiencies in Intel's implementation of the Visual C++ automation interfaces (specifically the non-implementation of VCProject::GetConfigurations and GetVCProjectEngine) any project environment variables in the Additional Include Folders and Preprocessor Definitions properties within an Intel compiler project cannot currently be expanded.

  • When a solution containing a single project is loaded, the Analysis Status Display will automatically show the contents of that project when loading completes, rather than leaving "All Projects" selected.

  • Clicking on the column in the Analysis Status Display containing a count of the total issues in a category now sets the category filter in the Analysis Results Display to that category.

  • Corrected a bug in the resolution of relative pathnames while activating items in the Analysis Results Display.

  • Added a "Lookup Meaning" command to the context menu of the Analysis Results Display. When activated, this will display details of the selected issue in the Lint Message Lookup Display,making the Display visible if required.

  • Disabled or hid a number of irrelevant controls under VS6/eVC4.

  • Improved lockouts which prevent toolwindows being docked when the Visual Assist "VA View" is active under Visual Studio 6.0 or eMbedded Visual C++ 4.0.

  • Files which are excluded from build (currently supported under VS2002 onwards) are no longer used when calculating analysis progress metrics [IMS ID 247].

  • Added a "Close this dialog when analysis completes" checkbox to the Manual Analysis Dialog at customer request. Also corrected the calculation of the content string extent to avoid unwanted text wrapping.

  • Visual Lint now checks the include configuration in std.lnt against that defined in the IDE when a workspace is loaded under Visual C++ 6.0 or eMbedded Visual C++ 4.0 (comparable checks for later IDEs are already present).

  • Added a "Do not ask me again" checkbox to the include folder mismatch prompt displayed when a discrepency between the contents of std.lnt and the current include folder configuration is detected. When activated, the "Automatically update the lint include configuration when the Visual Studio include folder configuration is changed" option is deactivated [IMS ID 251].

  • If the Visual Studio 6.0/eMbedded Visual C++ 4.0 add-in determines that its VSPackage is missing (which can happen if a legacy version of Visual Studio is installed after Visual Lint) it will attempt to deploy it to the correct folder (note that this is likely to fail under Windows Vista due to UAC, so additional work is necessary on this platform).

  • Fixed a bug which was preventing some custom solution/project analysis options from being loaded correctly.

  • Added a horizontal scrollbar to the "Include Folders" control in the Configuration Wizard.

  • Added ".cc" to the list of supported C++ file extensions.

  • Corrected a potential buffer overflow in the project file parser.

  • Minor corrections to the way Additional Include Folders are resolved.

  • Corrected calls to PathResolve() to ensure that the correct drive is used when resolving paths of the form "\folder1\folder2" while generating project specific .lnt files.

  • When a file is manually analysed, the corresponding command line is now displayed in the "Visual Lint Status" pane of the Output Window (this already during background analysis).

  • Added functionality to allow Visual Lint to perform analysis with only a std.lnt file (i.e. without an options.lnt file) at customer request.

  • Fixed an assert in the project file parsing code, which fired if the parser found environment variables it could not resolve (but did not necessarily need to - the project.lnt file writer should handle such cases) [IMS ID 250].

  • Fixed a minor bug in the Visual Studio service pack reading code which was causing it to fail when run under a limited user account.

  • Updated the copyright notice in the Visual Studio About Box (applies to VS2002 onwards).

  • Minor updates to the Readme and Licence text displayed by the installer.
We are continuing to develop Visual Lint so if you have any suggestions or feature requests, please let us know.

As ever, if you have any comments, questions or suggestions, please feel free to contact us. We welcome your feedback.

Posted by Anna at 20:59 | Get Link


Bringing the Visual Lint Installer into the 21st Century
Saturday, March 24, 2007

Since the first internal build of Visual Lint back in October 2004 it has used the Visual Studio Installer project generated by the Visual Studio add-in Wizard.

As far as it goes it's OK, although the installers it generates have (to my eye, at least) a rather clunky look and feel, and the amount of customisation you can do is extremely limited.

However, by far the most annoying feature for me though is the way it handles upgrades. The Windows Installer allows three fields in installer version numbers - ie major.minor.revision - unlike Windows, which has four fields. We use, and only release one build with a given major.minor.revision publicly. That's pretty standard, and works well in practice.

The fact that we only release one build with a given combination of major.minor.revision fields means that to the end user the installer will correctly remove previous versions.

Unfortunately, we (and our external testers, of course) get to see what happens when you install a new internal build with the same major.minor.revision fields:

Possibly the worst installation dialog in the world...

Annoying, isn't it? Due to this and a number of other issues we have been planning to ditch the Visual Studio Installer project for some time, possibly in favour of Advanced Installer. Unfortunately, time pressures meant that this is an issue we have only been able to look into addressing recently.

As often happens, good fortune (and good marketing!) intervened. When we attended ESWC last November one of the companies exhibiting was InstallAware. As someone who is very well aware of how low the standard of installation tools (yes, I'm looking at you, InstallShield), the presentation given by Sinan Kiraca from InstallAware was an eye opener. In particular, the IDE seemed extremely easy to use and the scripting language (MSIcode) a natural (albeit VB-ish - ugh!) extension of the environment rather than a necessary evil to cover up the inadequacies of the rest of the IDE.

I was sold on the spot (Beth was a little tougher; she has more direct experience of the depths certain installation tools have sunk to!), so the offer of free copies of InstallAware Express was a no-brainer. We immediately upgraded our licences to InstallAware Studio 6 (one notch below the enterprise version of the product) at a very reasonable cost. However, as all too often happens timescale pressures intervened again and they sat on the shelf until we had a little time to get to know the InstallAware IDE.

Looking back I have to say that the learning curve hasn't proved to be too steep at all. The only issues we've run into are the limited nature of the MSIcode editor (in particular its very poor copy/paste support and lack of support for drag/drop) and the completely unnecessary restriction that the "Install Files" MSIcode command take only fully qualified pathnames, with no variables allowed. The latter caused us some headaches in integrating with our build system, but fortunately we found a workaround. Aside from those niggles, it's a great environment to work in.

On Monday evening we released the first build ( containing this installer to our testers, and this was followed by a further build ( three days later to fix some minor issues we identified subsequently. We think the end result is a big improvement (and it works on Vista rather nicely) - but of course ultimately that's something only our customers can judge.

All being well, it will be publicly released shortly.

What you will see when the new installer runs

Posted by Anna at 07:52 | Get Link


Assimilating some of the better bits from the Vista User Interface
Friday, March 23, 2007

(or: Replacing Message Boxes with Task Dialogs, and other related improvements)

When we first ran Visual Lint on Vista RC1 we were struck by the potential which some of the user interface features of the new OS (notably Task Dialogs, the new style File Dialogs and some aspects of Aero Wizards offered to improve the "look and feel" of our product. At that time of course we had more pressing things to worry about (namely the release of Visual Lint 1.5 and with it Visual Lint Professional Edition) so unfortunately any work in this area had to wait.

However, once the release of Visual Lint Professional Edition was complete we were able to take a step back and look at these issues in more depth. Over the past three months (and alongside the integration of support for eVC4) we have been conducting a design study to determine what we could realistically achieve using the Vista APIs in the short term.

The results were pretty straightforward:

  • Using the TaskDialog API to replace the most commonly encountered MessageBox prompts within Visual Lint had the potential to make the product significantly easier to use for very little effort. The availability of a free library which allows Task Dialogs to be used on previous operating systems makes this one a complete no-brainer (we've improved the look and feel of it a bit, incidentally).

  • File Dialogs in Vista look significantly different, but the new APIs are not downlevel compatible, and there is no wrapper that we could find. Fortunately, we don't do anything complex in these dialogs (no fancy customisation, for example) so just changing from WTL::CFileDialog to the raw Win32 SDK calls was enough to do the trick as Vista only reverts to the old style file dialogs if a hook procedure is specified - as both MFC and WTL do - and using thevraw SDK calls ensures this doesn't inadvertantly happen.

  • Although Aero Wizards are a step forward in some ways, they do introduce at least one big annoyance (the placement and appearance of the "Back" button) so adopting it would not necessarily be a wise move for us at this time. As a result, we've decided to defer work in this area until we have time to conduct a thorough review of the Configuration Wizard - a task we hope to include in Visual Lint 2.0.

  • The default system font has changed from Tahoma 8 point to Segoe UI 11 point. Unlike the transition from Windows NT to Windows 2000, simply selecting "Use System Font" in the dialog template doesn't work, as the fonts have different metrics, so this time a more direct approach is required. We've dealt with this by writing a mix-in class which sets the fonts dynamically from the system font. The results can be seen in the Manual Analysis Dialog, Registration Key Dialog and About Box, all of which have had a Vista inspired makeover.

The results can be plainly seen in these screenshots of the latest Visual Lint build, which we will be publicly releasing shortly:

One of the new Task Dialogs within Visual Lint, shown here running under Windows Vista

One of the new Task Dialogs within Visual Lint, shown here running under Windows Vista

One of the new Task Dialogs within Visual Lint, shown here running under Windows XP

One of the new Task Dialogs within Visual Lint, shown here running under Windows XP

The Manual Analysis Dialog has had a Vista style makeover

The Manual Analysis Dialog has had a Vista style makeover

Visual Lint now uses the new style file dialogs when running under Windows Vista

Visual Lint now uses the new Windows Vista file dialogs

Of course, there is always plenty more to do; we're only really just getting started with this. As ever the phrase "watch this space" applies.

Posted by Anna at 12:15 | Get Link


ACCU Conference 2007: we'll be there
Saturday, March 17, 2007

Last November we attended our first conference - the European Shareware Conference (ESWC) at the Crown Plaza hotel in Cambridge. It was a very useful (albeit exhausting) weekend - we made some great contacts, acquired a new installer (InstallAware) and had a great time.

Given all that, it shouldn't come as a surprise that we fully intend to be at this years event at the Cologne Marriot Hotel on 3rd and 4th November. Incidentally, this time we will almost certainly be a sponsor for the event. I've just got to get those advertising materials sorted out first...

Anyway, enough background. A month or so ago I stumbled on details of another conference - ACCU 2007 - which looks if anything even more relevant to what we are doing than the ESWC. ACCU is what used to be the C Users Group (CUG) although its remit is far, far wider now.

Their annual conference looks to be a far bigger event than the ESWC, with some very well known names within the industry attending. This year, it is being held on 10th-14th April at the Paramount Oxford Hotel.

Some of the sessions which caught my eye were:

Needless to say we will be there, although not as exhibitors this year (we've got to scope the event out first!). If you are going to be there, please come up and say hello.

As a bit of an incentive, we will be offering free Visual Lint Standard Edition licences to the first 20 people who come and give us a business card at the conference.*

* Remember you'll need a valid PC-Lint licence to use it (unfortunately we can't give those away; we would if we could!).

Posted by Anna at 00:04 | Get Link