views:

42

answers:

2
1>cb.c(51): error C2061: syntax error : identifier 'SaveConfiguration'
1>cb.c(51): error C2059: syntax error : ';'
1>cb.c(51): error C2059: syntax error : 'type'
1>cb.c(52): error C2061: syntax error : identifier 'LoadConfiguration'
1>cb.c(52): error C2059: syntax error : ';'
1>cb.c(52): error C2059: syntax error : 'type'
1>cb.c(122): error C2061: syntax error : identifier 'SaveConfiguration'
1>cb.c(122): error C2059: syntax error : ';'
1>cb.c(122): error C2059: syntax error : 'type'
1>cb.c(127): error C2061: syntax error : identifier 'LoadConfiguration'
1>cb.c(127): error C2059: syntax error : ';'
1>cb.c(127): error C2059: syntax error : 'type'
1>
1>Build FAILED.

It's just a single .c file in the project. Here's the code:

#define WIN32_LEAN_AND_MEAN

#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <tchar.h>

typedef struct _Configuration
{
    int             KeyActivate;
    int             BlockWidth;
    int             BlockHeight;
    double          HueStart;
    double          HueEnd;
    double          SaturationStart;
    double          SaturationEnd;
    double          ValueStart;
    double          ValueEnd;
} Configuration;

typedef struct _DIBSection
{
    HDC     ScreenDC;
    HDC     WindowDC;
    HDC     MemoryDC;
    HBITMAP ScreenBMPHandle;
    BITMAP  ScreenBMP;
} DIBSection;

typedef struct _Thread
{
    HANDLE      Handle;
    unsigned    Id;
} Thread;

typedef struct _Window
{
    HANDLE  Handle;
    HDC     DC;
    int     Width;
    int     Height;
    int     Top;
    int     Left;
} Window;

__declspec ( dllexport ) int Initialize ( void );
unsigned __stdcall Start ( void * Arguments );

void LoadDefaultConfiguration ( Configuration * Config );
bool SaveConfiguration ( Configuration * Config, LPTSTR FilePath );
bool LoadConfiguration ( Configuration * Config, LPTSTR FilePath );

Thread          MainThread;
Window          Screen;
Configuration   Settings;

BOOL WINAPI DllMain ( HINSTANCE Instance, DWORD Reason, LPVOID Reserved )
{
    switch ( Reason )
    {

        case DLL_PROCESS_ATTACH:

            // TODO: Load settings from file
            LoadDefaultConfiguration ( & Settings );

            // Create main thread
            MainThread.Handle = (HANDLE) _beginthreadex (
                NULL,
                0,
                Start,
                NULL,
                0,
                & MainThread.Id
                );

            if ( MainThread.Handle )
            {
                SetThreadPriority ( MainThread.Handle, THREAD_PRIORITY_BELOW_NORMAL );
            }
            else
            {
                MessageBox ( NULL, L"Unable to create main thread; exiting", L"Error", MB_OK );
                ExitProcess ( 0 );
            }

            break;

        case DLL_PROCESS_DETACH:

            break;

    }

    return TRUE;
}

__declspec ( dllexport ) int Initialize ( void )
{
    return 1;
}

unsigned __stdcall Start ( void * Arguments )
{
    return 1;
}

void LoadDefaultConfiguration ( Configuration * Config )
{
    Config->BlockHeight = 50;
    Config->BlockWidth = 100;
    Config->HueEnd = 0.00;
    Config->HueStart = 0.00;
    Config->KeyActivate = VK_SHIFT;
    Config->SaturationEnd = 0.00;
    Config->SaturationStart = 0.00;
    Config->ValueEnd = 0.00;
    Config->ValueStart = 0.00;
}

bool SaveConfiguration ( Configuration * Config, LPTSTR FilePath )
{
    return true;
}

bool LoadConfiguration ( Configuration * Config, LPTSTR FilePath )
{
    return true;
}

Line 51 is

bool SaveConfiguration ( Configuration * Config, LPTSTR FilePath );
+5  A: 

bool is not a C type.

I do suspect BOOL is defined somewhere.

Same goes for the usage of true and false.

leppie
Can't believe I missed that, I was doing C++ right before I started this, thanks.
guitar-
@guitar-: Don't forget to accept th correct answer
abatishchev
C99 does have `bool` in all its glory. A good link on Windows and its booleans (and lookalikes) is here: http://blogs.msdn.com/b/oldnewthing/archive/2004/12/22/329884.aspx
dirkgently
+3  A: 

Actually, bool is a valid type (well, a macro actually) in the C99 standard, assuming you are using a recent compiler. You need to add:

#include <stdbool.h>

Note that bool is not valid in the older ANSI, C89, C90 etc variants of the C standards.


As highlighted by JeremyP in the comments, Microsoft's C compiler still lacks proper support for C99 features.

Which leaves three alternatives:

  1. Treat it as C++, not C; because C++ has bool as a built-in type
  2. Create your own bool implementation
  3. Re-write the code to avoid using bool

For option 2 something like this would work, but it's an ugly work-around:

typedef short bool;
#define true 1
#define false 0
Simon
He's not using a recent compiler, he's using Microsoft Visual C which does not support C99.
JeremyP
Good point. I'd assumed that Microsoft would have added it at some point in the last decade, but they appear (after some reading around) to be ignoring C99, instead focussing their efforts on C++0x.
Simon