Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

undefined reference to "TextOutA@20"

Ostatnio zmodyfikowano 2014-11-14 23:40
Autor Wiadomość
chomi525
Temat założony przez niniejszego użytkownika
undefined reference to "TextOutA@20"
» 2014-11-14 22:57:47
Witam mam problem gdy próbuje skompilować ten program pojawia się błąd undefined reference to "TextOutA@20"
źródło:

#define WIN32_LEAN_AND_MEAN

#include <glut.h>
#include <stdlib.h>
#include <windows.h>

int widthWindow = 600;
int heightWindow = 600;

int positionWindow_x = 100;
int positionWindow_y = 100;

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParm,LPARAM lParam); //deklaracja procedury okienkowej

//*******************************************MAIN***************************************************************
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    HWND hwnd;
    MSG msg;
    bool done;
    WNDCLASSEX windowsClass; //deklaracja klasy okna

    //atrybuty klasy okna
    windowsClass.cbSize = sizeof(WNDCLASSEX);
    windowsClass.style = CS_HREDRAW | CS_VREDRAW;
    windowsClass.lpfnWndProc = WndProc;
    windowsClass.cbClsExtra = 0;
    windowsClass.cbWndExtra  = 0;
    windowsClass.hInstance = hInstance;
    windowsClass.hIcon = LoadIcon(NULL, IDI_WINLOGO);
    windowsClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    windowsClass.hbrBackground = ( HBRUSH )( COLOR_WINDOW + 1 );
    windowsClass.lpszMenuName = NULL;
    windowsClass.lpszClassName = "WindowClass_a";
    windowsClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO);
    //atrybuty klasy okna

    if(!RegisterClassEx(&windowsClass))
    {
        MessageBox(NULL,"error code : 1","error", MB_OK | MB_ICONEXCLAMATION);
        return 1;
    }

    hwnd = CreateWindowEx(NULL,"WindowClass_a","Ronold",WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_SYSMENU, //tworzenie okna
    positionWindow_x, positionWindow_y, widthWindow, heightWindow,NULL,NULL,hInstance,NULL);

    if(!hwnd)
    {
        MessageBox(NULL,"error code : 2","error",MB_OK | MB_ICONEXCLAMATION);
        return 1;
    }

    done = false;

    while(!done)
    {
        PeekMessage(&msg,hwnd,NULL,NULL,PM_REMOVE);

        if(msg.message == WM_QUIT)
        {
            done = true;
        }
        else
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }



    return msg.wParam;
}
//*******************************************MAIN***************************************************************

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParm,LPARAM lParam) //procedura okienkowa
{
    PAINTSTRUCT paintStruct;
    HDC hDC;
    char stringa[] = "witamy !";

    switch(message)
    {
        case WM_CREATE: //tworzenie okna
        {
            return 0;
            break;
        }
        case WM_CLOSE: //zamykanie okna
        {
            return 0;
            break;
        }
        case WM_PAINT: //odrysowywanie zawartości okna
        {
            hDC = BeginPaint(hwnd, &paintStruct);
            TextOut(hDC,150,150,stringa,sizeof(stringa)-1);


            EndPaint(hwnd, &paintStruct);
            return 0;
            break;

        }
        default: break;
    }


    return (DefWindowProc(hwnd,message,wParm,lParam));
}
P-120619
Chlorek
» 2014-11-14 23:03:17
Dodaj potrzebne biblioteki statyczne do linkowania (gdi32.a/lib).
P-120620
chomi525
Temat założony przez niniejszego użytkownika
» 2014-11-14 23:17:48
A jak to zrobić bo nie zabardzo ogarniam ?
P-120622
Chlorek
» 2014-11-14 23:23:48
Opcja do dodania dla kompilatora to
-lgdi32

Zapewne korzystasz z jakiegoś IDE więc zwyczajnie w ustawieniach projektu dodaj tą bibliotekę (a jak to zależy od IDE jakiego używasz).

Poza tym widzę, że masz nagłówek glut.h a nie widzę byś jakkolwiek z tego korzystał. Kolejne dziwne rzeczy w Twoim kodzie to np. to:
C/C++
return 0;
break;
Następnie ta linijka wykonywana przy każdym wykonaniu funkcji WndProc() (to co wywołuje ci pętla eventów):
char stringa[] = "witamy !";

A i kod na forum dobrze dać w
[cpp][/cpp]
a nie tak luzem.

Co do pętli zdarzeń to też powinno się to zrobić nieco inaczej:
while( GetMessage( & msg, NULL, 0, 0 ) )
Lepsze zamiast dodawania własnej zmiennej i ustawiania jej przy evencie WM_QUIT.
P-120623
chomi525
Temat założony przez niniejszego użytkownika
» 2014-11-14 23:40:29
Dzięki działa co do glut.h to on jest dodany na przyszłość miałem zamiar rozbudować ten program.A co do tych błędów to dopiero się ucze pisać aplikacji okienkowych z książki "OpenGl programowanie gier".
P-120625
« 1 »
  Strona 1 z 1