[An answer to my own question in the hope to help others experimenting the same problem]


I found the following hack to overcome the problem:

The name of the header file included at the top of the generated c file is defined in the variable COMPILER::*cmpinclude*.  It is therefore possible to overwrite the variable and to include a different file.  Using my own header file which first includes StdAfx.h and after the header defined by the original value of COMPILER::*cmpinclude* solves the problem...

Here in more detail:

--- RhinoLispPrologue.h ---
#include "StdAfx.h"
#include <ecl/ecl-cmp.h>

I then build the library with

  (let ((COMPILER::*cmpinclude* "\"RhinoLispPrologue.h\""))
    (asdf:make-build system ...)



On Sun, Jul 7, 2013 at 9:22 PM, Dietrich Bollmann <dietrich@formgames.org> wrote:

I am trying to use ECL as scripting language for a large Windows program (Rhino3D).

When including the precompiled headers required by Rhino plugins with

   (ffi:clines "#include \"StdAfx.h\")

and building the library with (asdf:make-build system :type :shared-library ...)

I get the following error:

  fatal error C1189: #error :  WINDOWS.H already included.  MFC apps must not #include <windows.h>

Moving the include statement to the very top of the generated c file (before the #include <ecl/ecl-cmp.h> sttement), however, and compiling manually works.

I tried to make use of the "prologue-code" option and solve the problem by prepending the include statement to the generated code as follows:

  (asdf:make-build system :type :shared-library :prologue-code "#include \"StdAfx.h\"" ...)

But the prologue-option string was not inserted anywhere into the generated code.

Any idea about how to solve the problem?

Thanks for your help,