www.digitalmars.com Home | Search | C & C++ | D | DMDScript | News Groups | index | prev | next
Archives

D Programming
D
D.gnu
digitalmars.D
digitalmars.D.bugs
digitalmars.D.dtl
digitalmars.D.dwt
digitalmars.D.announce
digitalmars.D.learn
digitalmars.D.debugger

C/C++ Programming
c++
c++.announce
c++.atl
c++.beta
c++.chat
c++.command-line
c++.dos
c++.dos.16-bits
c++.dos.32-bits
c++.idde
c++.mfc
c++.rtl
c++.stl
c++.stl.hp
c++.stl.port
c++.stl.sgi
c++.stlsoft
c++.windows
c++.windows.16-bits
c++.windows.32-bits
c++.wxwindows

digitalmars.empire
digitalmars.DMDScript

c++ - Internal Error type 600

↑ ↓ ← Eric E. King, EIT <Eric_member pathlink.com> writes:
I've been trying to build Allegro 4.1.17 with DMC (along with DJGPP to build the
ASM sources), and it has resulted in an internal error when trying to build
src/i396/asmdef.c. I would like to provide more information about the error, but
apparently the error in happening in the preprocessor because the generated
listing file (-e -l) doesn't not contain the full source, but stops (presumably)
at the point of the internal error. That makes isolating the problem difficult
for me. Any suggestions?

Other than this error, everything seems to progressing well with getting allegro
to build under dmc.
Jan 22 2005
↑ ↓ Eric E. King, EIT <Eric_member pathlink.com> writes:
In article <csv7eg$27sd$1 digitaldaemon.com>, Eric E. King, EIT says...
src/i386/asmdef.c
apparently the error is happening
listing file (-e -l) doesn't contain
seems to be progressing well

Sheesh, sorry about the typos. I guess I should get some sleep.
Jan 22 2005
↑ ↓ → "Walter" <newshound digitalmars.com> writes:
Your email address fails, so I can only reply here:
--------------------------------------------------
The failing example boils down to:


typedef int (*DIALOG_PROC)(int);


struct DIALOG
{
   DIALOG_PROC proc;
};

__declspec(dllimport) int d_clear_proc(int);

struct DIALOG test =
{
   d_clear_proc
};

The trouble is stemming from the __declspec(dllimport). The way this works
on Windows is that calls to an import go through a level of indirection, but
that level isn't a constant, hence the error. The way to fix this is to use
an import library to connect to the DLL, and then remove the
__declspec(dllimport) from the declarations.

Your source:

/* describe how function prototypes look to DMC */
#if (defined ALLEGRO_STATICLINK) || (defined ALLEGRO_SRC)
   #define _AL_DLL
#else
   #define _AL_DLL   __declspec(dllimport)
#endif

should be written to something like:

#if (defined ALLEGRO_STATICLINK) || (defined ALLEGRO_SRC) || defined
(USE_IMPORT_LIBRARY)
   #define _AL_DLL
#else
   #define _AL_DLL   __declspec(dllimport)
#endif

-Walter
Jan 28 2005