Avatar billede blackautt Nybegynder
27. december 2004 - 08:55 Der er 14 kommentarer

Jeg får en syntax error i min RC fil (Win32 API)

Er der nogen der kan komme med en forklaring på, hvorfor jeg får en syntax error i min resource fil i følgende :

IDD_ABOUT DIALOG DISCARDABLE  0, 0, 239, 66
** STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About"
FONT 8, "MS Sans Serif"
BEGIN
    DEFPUSHBUTTON  "&OK",IDOK,174,18,50,14
    PUSHBUTTON      "&Cancel",IDCANCEL,174,35,50,14
    GROUPBOX        "About this program",IDC_STATIC,7,7,225,52
    CTEXT          "Test",
    IDC_STATIC,16,18,144,33
END

** det er denne linie der fejler.

Jeg har forsøgt mig med at udskifte WS'erene, samt a semicolon'ere alle linier, uden held
Avatar billede blackautt Nybegynder
27. december 2004 - 11:43 #1
Jeg tilføjer lige den eksakte fejlbesked
C:\MinGWStudio\MinGW\bin\windres.exe: menu_one.rc:15: syntax error

hvor linie 15 er den linie jeg har angivet med **
Avatar billede blackautt Nybegynder
27. december 2004 - 13:49 #2
nu har jeg siddet og kastet den lidt rundt og det ser ud til at det er et spørgsmål om mine include filer. Hvis jeg vælger at inkludere windows.h og winres.h, flytter fejlen sig til linien : "GROUPBOX .."  .. er der virkelig ikke nogen der kan hjælpe mig?
Avatar billede blackautt Nybegynder
27. december 2004 - 13:52 #3
... samt at problemet ligger i IDC_STATIC ... den kører igennem hvis denne ændres til 0, men det får jeg ikke nogen dialogboks af alligevel
Avatar billede bertelbrander Novice
27. december 2004 - 19:53 #4
I min mingw's afxres.h er IDC_STATIC defineret til -1.

Men det forklarer ikke hvorfor du ikke får vist din dialogbox, måske skulle du prøve at tilføje en WS_VISIBLE.
Avatar billede blackautt Nybegynder
28. december 2004 - 10:31 #5
Det skulle helst være sådan, at når man bruger winres.h, så burde det ikke være nødvendigt at bruge afxres.h  ... jeg har så dog prøvet det af, men det virker heller ikke.

Jeg har også konstateret, at problemet varierer mellem de programmer jeg bruger. I dev-cpp kan jeg godt kompile en exe fil (som virker, men ikke giver dialogboksen), hvor den slet ikke kompilerer noget i MinGW Developer Studio, som til gengæld giver mig et HAV af nye sjove fejl, hvis jeg erstatter IDC_STATIC med 0.. bl.a. fortæller den mig, at hwnd er unspecified first use??!

Det er ikke så sjovt for mig, da det hele startede med at jeg ville lære at programmere til win32 og dette er en tutorial der bare ikke dur! :)
Avatar billede bertelbrander Novice
28. december 2004 - 19:48 #6
Prøv at poste hele koden (til dev-cpp), hvis du synes at det er for omfattende må du godt putte det i en email til mig (vi skal blot huske at poste løsningen her).
Avatar billede blackautt Nybegynder
29. december 2004 - 08:14 #7
Her er main.cpp :

#include <windows.h>
#include "resource.h"

const char g_szClassName[] = "myWindowClass";

// Step 4: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_ABOUT), hwnd, AboutDlgProc);

{
    switch(msg)
    {
        case ID_HELP_ABOUT:
        {
            int ret = DialogBox(GetModuleHandle(NULL),
                MAKEINTRESOURCE(IDD_ABOUT), hwnd, AboutDlgProc);
            if(ret == IDOK){
                MessageBox(hwnd, "Dialog exited with IDOK.", "Notice",
                    MB_OK | MB_ICONINFORMATION);
            }
            else if(ret == IDCANCEL){
                MessageBox(hwnd, "Dialog exited with IDCANCEL.", "Notice",
                    MB_OK | MB_ICONINFORMATION);
            }
            else if(ret == -1){
                MessageBox(hwnd, "Dialog failed!", "Error",
                    MB_OK | MB_ICONINFORMATION);
            }
        }
        break;

        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case ID_FILE_EXIT:
                PostMessage(hwnd, WM_CLOSE, 0, 0);
                break;
                case ID_STUFF_GO:
                break;
            }
        break;

        case WM_CLOSE:
        DestroyWindow(hwnd);
      break;
      case WM_DESTROY:
        PostQuitMessage(0);
      break;
      default:
        return DefWindowProc(hwnd, msg, wParam, lParam);

    }
    return 0;
}



int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc;
    HWND hwnd;
    MSG Msg;

    //Step 1: Registering the Window Class
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style        = 0;
    wc.lpfnWndProc  = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance    = hInstance;
    wc.hIcon          = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON));
    wc.hIconSm      = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON), IMAGE_ICON, 16, 16, 0);
    wc.hCursor      = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+2);
    wc.lpszMenuName  = MAKEINTRESOURCE(IDR_MYMENU);
    wc.lpszClassName = g_szClassName;
    wc.hIconSm      = LoadIcon(NULL, IDI_APPLICATION);

    if(!RegisterClassEx(&wc))
    {
        MessageBox(NULL, "Window Registration Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    // Step 2: Creating the Window
    hwnd = CreateWindowEx(
        WS_EX_CLIENTEDGE,
        g_szClassName,
        "Test",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 640, 480,
        NULL, NULL, hInstance, NULL);

    if(hwnd == NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    // Step 3: The Message Loop
    while(GetMessage(&Msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return Msg.wParam;
}
---------------------------------------------------------------------------

Her er min Menu_one.rc :

#include "resource.h"
#include "windows.h"
#include "afxres.h"

#define APSTUDIO_READONLY_SYMBOLS

//#ifndef __BORLANDC__
#include "winres.h"
//#endif
#undef APSTUDIO_READONLY_SYMBOLS

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32

#ifdef APSTUDIO_INVOKED

1 TEXTINCLUDE DISCARDABLE
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE DISCARDABLE
BEGIN
  // "#ifndef __BORLANDC__\r\n"
    "#include ""winres.h""\r\n"
    "#endif\r\n"
    "\0"
END

3 TEXTINCLUDE DISCARDABLE
BEGIN
    "\r\n"
    "\0"
END

#endif   

IDR_MYMENU MENU DISCARDABLE
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM "L&oad Config",                                              ID_LOAD_CONFIG
        , GRAYED
        MENUITEM "S&ave Config",                                              ID_SAVE_CONFIG
        , GRAYED
        MENUITEM "E&xit",                                                    ID_FILE_EXIT
    END
    POPUP "&Connect"
    BEGIN
        MENUITEM "&Connect to Server",                        ID_STUFF_GO
        MENUITEM "&Disconnect",                                                ID_STUFF_GOSOMEWHEREELSE
        , GRAYED
    END
    POPUP "&About"
    BEGIN
        MENUITEM "A&bout",                                                      ID_HELP_ABOUT
    END
END

IDD_ABOUT DIALOG DISCARDABLE  0, 0, 239, 66
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "My About Box"
FONT 8, "MS Sans Serif"
BEGIN
    DEFPUSHBUTTON  "OK",IDOK,174,18,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,174,35,50,14
    GROUPBOX        "About this program...",IDC_STATIC,7,7,225,52
    CTEXT          "An example program showing how to use Dialog Boxes\r\n\r\nby theForger",IDC_STATIC,16,18,144,33
END

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
    IDD_ABOUT, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 232
        TOPMARGIN, 7
        BOTTOMMARGIN, 59
    END
END
#endif    // APSTUDIO_INVOKED

#endif
#ifndef APSTUDIO_INVOKED

#endif    // not APSTUDIO_INVOKED

-------------------------------------------------------------------------------

Her er min resource.h :

//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by menu_one.rc
//
#define IDR_MYMENU                      101
#define IDI_MYICON                      102
#define ID_FILE_EXIT                    40001
#define ID_STUFF_GO                    40002
#define ID_STUFF_GOSOMEWHEREELSE        40003
#define ID_HELP_ABOUT                    40004
#define ID_LOAD_CONFIG                    40005
#define ID_SAVE_CONFIG                40006
#define IDD_ABOUT                        40007


// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        103
#define _APS_NEXT_COMMAND_VALUE        40008
#define _APS_NEXT_CONTROL_VALUE        1000
#define _APS_NEXT_SYMED_VALUE          101
#endif
#endif
Avatar billede blackautt Nybegynder
29. december 2004 - 08:16 #8
Her er fejlmeddelelsen :

C:\MinGWStudio\MinGW\bin\windres.exe: menu_one.rc:70: syntax error
Avatar billede bertelbrander Novice
29. december 2004 - 22:05 #9
Jeg har rette en lidt hist og her, nu kompilerer og kører det:
home20.inet.tele.dk/midgaard/ng78.zip

Da jeg ikke kan finde ud af at bruge dev-cpp, har jeg lavet en lille makefile som jeg brugte til at oversætte med, den bruger samme kompiler som dev-cpp.
Man kører kommandoen:
make -f makefile.gcc

Så skulle den gerne bygge et program. Du kan evt forsøge at overtale dev-cpp til at oversætte det.
Avatar billede blackautt Nybegynder
30. december 2004 - 07:59 #10
Jeg takker for hjælpen, men desværre virker det stadig ikke. Jeg får stadig en syntax error i linien :

GROUPBOX        "About this program...",IDC_STATIC,7,7,225,52

.. selv når jeg kører makefile .. kan der være en regional setting (amerikanere og englændere staver jo ikke alting ens)?
Avatar billede bertelbrander Novice
30. december 2004 - 20:06 #11
Har din mingw en afxres.h ? Det er tilsyneladende ikke alle versioner der har.

Prøv at putte en:
#define IDC_STATIC (-1)
ind i .rc filen, et sted nær toppen.
Avatar billede blackautt Nybegynder
03. januar 2005 - 09:11 #12
Der var den! Jeg takker mange gange... læg lige et svar så du kan få point :)
Avatar billede bertelbrander Novice
03. januar 2005 - 19:56 #13
Jeg samler ikke på point.
Avatar billede blackautt Nybegynder
03. januar 2005 - 20:19 #14
ok.. :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester