Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Tools for WriteLog contest module development This repo contains:

  1. Check branches in this repo for older versions of Visual Studio
  2. Source code for Visual Studio 2019 wizards that create WriteLog contest module implementations.
  3. Instructions for using Visual Studio 2019 Community Edition.
  4. The necessary header files and import libraries to build WriteLog contest modules.

Developing in VS 2019 targets only WriteLog version 12. (The VS2013 nor VS2019 C++ runtime is not installed by the WL11 installer.) Developing in VS 2019 can target both WriteLog 11 and 12, but you must arrange to install the VS 2019 runtime when your module is installed on WriteLog versions older than 12.55.

The Directory Structure

The wizards generate code that assumes the relative file paths set up in this repo:

Is not part of this repo, but is in .gitignore. It is where you should have the VS File/New-project wizard place any newly created WL module development projects.

contains the source of the module create wizard.

contains the source of the VS2019 project create wizard.

contains the source of the various headers and import libraries required by the generated project. These headers and libraries suffice for both WL11 and WL12 (all versions of Visual Studio). You do not edit anything here, with one exception:

is where it is suggested you put your own common headers you want available across multiple modules. The wizards arrange for this directory to be in the include path for both C++ and .rc compiles, so this is a good place to put, for example, source code for any copyright or version information you want in common across your modules.


Don't touch these. It is also recommended that you not use any headers you find in there for your development because much of it is archaic. The reason the archaic stuff remains is to enable source-code compatible development of module developed using the old Visual Studio 6 wizard last updated in 2008 (and most of which dates from 2000--or earlier.)

The wizards

You must already have VS 2019 installed. The Community Edition 2019 is supported for WriteLog module development. It takes two wizard operations to create a WriteLog contest module:
  1. The wl12ProjectWizard2019 creates a skeleton project from the VS File/New-Project menu.
  2. The WL12ModuleWizard adds skeleton header/cpp/wxs files to such a project for a contest.

Deploying the wizards

There are two wizards: one for creating a project, and one for adding a module to a project. Follow the one-time editing instructions below. There is more than one way to accomplish deployment, but here is one that works and is minimally intrusive on your system.

For all wizards it is not necessary to use Visual Studio to File/Open-Project of any of the .sln/.vcproj/.vcxproj files in the repo Wizard/ folders. Doing so MIGHT cause VS to auto-magically deploy the wizard in your <MyDocuments> folder, which might or might not conflict with the instructions below. Of course, if you don't like the way the wizards work, you are welcome to change them to suit yourself.

Deploy the Project Wizard

Visual Studio should have already created the directory <MyDocuments>\Visual Studio 2019\. Create a subfolder named \Wizards\ and copy these 3 files (and only these 3) from the WL12ProjectWizard2019 repo folder:
  • WL12ProjectWizard2019.ico
  • WL12ProjectWizard2019.vsdir
  • WL12ProjectWizard2019.vsz
Edit that last file, the .vsz file, to correct the absolute path. Make it point to the corresponding directory in your fetched version of this git repo:
Param="ABSOLUTE_PATH = c:\wherever\WriteLogWizards\WL12ProjectWizard2019"

There is no need to copy the files out of your git work area.

Now File/New Project in Visual Studio should show this entry that wasn't there before.


In order for the directory structure to match that assumed by the module wizard, when creating a new project, browse to the Projects directory in this repo (create it, if necessary), and turn on the Place solution and project in the same directory check box.

Deploy the ModuleWizard

Getting a new item into the Visual Studio Add/New-Item menu apparently cannot be done in My Documents like a project wizard. Its deployment requires administrator privilege. You must create files in the Visual Studio installation directory. The directory to find is:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\VC\vcprojectitems 
In that vcprojectitems directory, you need two things:
  • Create a folder named LocalItems.
  • Into that same vcprojectitems folder, copy the file (unchanged) from this repo: WL12ModuleWizard/Deploy/LocalItems.vsdir.
And then into that newly created LocalItems folder, copy these three files from the repo's WL12ModuleWizard folder:
  1. WL12ModuleWizard2019.ico
  2. WL12ModuleWizard2019.vsdir
  3. WL12ModuleWizard2019.vsz
That .vsz file must be edited to correct the ABSOLUTE_PATH. Again, there is no need to copy files out of the git work area: just point that vsz file to the appropriate subdirectory in your fetched copy of this git repo. Once installed, and in Visual Studio with a WL project open, a right mouse click on the project looks like this:



You use the Add New Item repeatedly in order to support more than one contest from a single .DLL. The module wizard presents these options.


  • Rtty Support adds the interfaces that the RttyRite window needs to fully support highlighting and clicking into WriteLog's Entry Window.
  • Cabrillo Support adds enough cabrillo support for basic export.
  • NR in exchange instructs the wizard to add an NR column to the log.
  • Pts Column adds a column to the log to display the points claimed for each QSO.
  • RST in exchange adds sent/received RST columns to the log.
  • Mode support selects among 3 choices.
    • compiled-in The modes (CW/SSB/RTTY) are decided at compile time. Many RTTY contests are examples.
    • ask at startup For a given weekend, only one mode (or set of modes) is allowed, but you need to ask the user which. Think ARRL SS CW versus SSB.
    • multi-mode means that the contest rules are that on a given frequency band, contestants can make separate QSOs for credit on multiple modes. Think IARU HF.
  • DXCC means the contest counts DXCC countries as multipliers, and the wizard generates code for the case of countries as mults once per contest, or once per band.
  • Zones means the contest counts zones as multipliers. The wizard generates support for zones 1 - 40 (per CQ zones) but you can change this to use ITU zones instead.
  • Mults as you go means that every unique string logged for a field is a separate multiplier, but you don't know when the contest starts what they're going to be. This can be used for logging those contests where the "headquarters stations" are their own multipliers. WPX also works this way.
  • Named Mults means there is a list of strings (like state names, or whatever) that are the multipliers for the contest. You will need to create (and distribute) an INI file that has the multipliers in it along with any ALIAS names you want to all refer to the same multiplier
  • Roving Stations
    • Dupe received as Rover The received exchange makes a matching call and band not a duplicate.
    • Can be rover You change to a different county or grid and work stations again.
    • Automate county line When operating from a county/grid boundary, press TAB on an empty QSO Window and WriteLog fills in the next county/grid you haven't already logged for that call and band.
  • Contest Display Name is what the user will see in the WriteLog Select Contest list.
  • Class Name is the name of the C++ class to be generated. The wizard has to generate a name for the corresponding COM coclass which it does this way: if you start the name of the class with a "C" (capital C) then the coclass is the name of the C++ class with no leading C. Otherwise, the name of the coclass is the name of the C++ class with CoClass appended

Installer support

The wizards described above generate code for a WIX installation using the kits available at Installing the WIX tool set after Visual Studio will result in Visual Studio support for WIX installer projects. While the dll's created by the wizard support self-registration, that is not a recommended means for registration when deployed on customer machines (but its fine for use in development.) For customer depoloyment, use the .wxs files generated by the WriteLog wizards to create an msi installer for your module.

Generating the installer is not fully automated by these wizards. The Project wizard generates a product.wxs suitable to be added to a "Windows Installer XML" Setup project. And the Module wizard generates a .wxs suitable to be added to that same Windows Installer project. But these .wxs files are just "loose" in the dll's project--they are not referenced by or needed by the dll project. This readme does not attempt to document how to use the Visual Studio support for the Wix installer. This is just enough information to get you started.

Create the installer project after you have done a successfull Release build of with all the contest modules you want in your project dll. The relative include paths in the generated .wxs files assume this new installer project is placed in the same Projects/ folder as the module projects. Use Visual Studio File/New-Project and choose "Windows Installer XML" and "Setup Project".

The Visual Studio wizard generated a file named product.wxs that you discard. Replace it with the product.wxs moved from where WriteLog Product wizard generated it. At the same time, move the .wxs files that the WriteLog Module wizard generated.

With the installer project open in Visual Studio, do a right mouse click on the install project and Add/Existing-item and add the .wxs file. The project also needs a Reference to WixUIExtension that comes with WIX.

Edit the various TODO's in the two wxs files. (Or more wxs files if you put support more than one contest in your project).

Source code changes required for older modules

There are a handful of bugs in the header files generated using the old Visual Studio 6 WriteLog contest wizard. It is recommended that any new work on those old modules be done using the software development environment published here, and with Visual Studio 2008 (or VS 2013 if WL12 and later support is all that is desired.) Start by placing the old module's source code in its own new folder under Projects in the directory tree created by this repo. You do not run any of the wizards in order to rebuild an old project. This exercise is just to use the latest versions of the header files, which have some templates and preprocessor directives that have been improved since the VS 6 wizard was deployed.

There are a couple of source code changes required in old modules to make them compile in this updated environment:

  1. Place the old source code directory in the new Projects folder here.
  2. The include path structure has changed. The easiest way to deal with this is to edit only the .vcproj as text.
    • Replace this: ..\..\Wlogtool with ..\..\WriteLog\Wlogtool.
    • Similarly, replace ..\..\include with ..\..\WriteLog\include.
    • This one is slightly different: ..\mmdcom becomes ..\..\WriteLog\mmdcom.
    • Finally, to the include file paths, add this directory which did not appear in the old wizard: ..\..\WriteLog\generated
  3. The clsid.c file won't compile anymore. Because it references headers that now only work in C++. Using the VS Solution explorer, rename it to clsid.cpp.
  4. clsid.cpp still might not compile if the <projectname>mm.h file won't compile stand-alone. One simple way to fix this is to split out from <projectname>mm.h the bit that clsid.cpp needs into a separate file.
    • Create a new header file named, say, <projectname>guid.h.
    • Cut from <projectname>mm.h all the lines that look like this:
      DEFINE_GUID(CLSID_EuRttyMmd, 0xC7212160, 0x7716, 0x101A, 0xAA, 0x54, 0x00, 0x60, 0x8C, 0x61, 0xD0, 0xB1); /* C7212160-7716-101A-AA54-00608C61D0B1 */
    • and paste those lines into <projectname>guid.h
    • Update <projectname>mm.h to #include the new guid.h
    • Change clsid.cpp to #include the new guid.h instead of mm.h.


Tools for WriteLog contest module development







No releases published


No packages published