Some time ago I began a project to translate the C header files to GoAsm syntax. This turned out to be a very large task, much larger than I first anticipated. Due to external pressures the development was slow and drawn out over many months but I have the first set of headers ready for testing. The list is not complete by any standards, there are still some huge files to go through and I can only work on them when I have time. The following is a list of the objectives of the project...

    [*]To make a complete set of definitions encompassing all Windows versions up to Windows 2003 Server
    [*]To use the .H extension and stick to the same file list as C in order to match MSDN
    [*]To have the version of the header verifiable within GoAsm source code
    [*]To create a standard set of GoAsm macros for use in projects
    [*]To extend the defintions with knowledge acquired through the boards
    [*]To provide a complete set of vtables and guids for COM applications
    [*]To limit the number of compile time switches to a select list

An example of extending the definitions is the addition of APIs in shellapi.h, in that file a switch is present (SHUSEORDINALS) that allows you to convert the settlement API commands to ordinal calls. This allows you to use many XP only APIs in almost every version of Windows. Also some undocumented APIs are included with the SHUSEUNDOC switch.

This set of includes is only usable with GoAsm as the syntax is very specific to that assembler and in some cases completely incompatible with others. Specifically MASM will choke on the files.

Known issues:

In some cases the definitions will adversely and catastrophically affect the INVOKE pseudo-macro, Jeremy has been informed. <FIXED in GOASM version 0.55.14>

There are sporatic cases where I forgot to translate a C declaration or did not properly edit the line, for example I might have left something like


This will throw an error, just post it here and I will correct it.

For the current version use the WIN32_LEAN_AND_MEAN switch, the headers for that compile directive are done (though not completely tested).

Testing and additions are very welcome.

I've moved the file to my website in order to have the version consistent across all boards. Just click on GoAsm headers in the main index
Posted on 2006-11-13 15:05:48 by donkey
In some cases the definitions will adversely and catastrophically affect the INVOKE pseudo-macro, Jeremy has been informed.

The latest version of GoAsm available from here:-

  • sorts out the above bug, and some lesser ones

  • adds automatic structure alignment in Win32 (this was already happening when using local data)

  • adds support for #dynamiclinkfile which allows you to specify in the asm source a dll/ocx/exe/drv file which exports functions used in your program, instead of in the linker's command line or command file (you need GoLink 0.26.5 for this to work)

Posted on 2006-11-14 13:19:00 by jorgon