Fehler : undefined reference to '_GetStockObject@4'

Windowsspezifische Probleme, WinAPI, conio.h
Antworten
darkangel
Beiträge: 17
Registriert: Sa Jan 17, 2009 9:26 pm
Kontaktdaten:

Fehler : undefined reference to '_GetStockObject@4'

Beitrag von darkangel » Fr Mär 06, 2009 9:35 pm

Servus.
Ich bin mir nicht ganz sicher, ob das hier reinpasst, da ich keine anderen derartigen Einträge hier sehe, doch die Beschreibung dieses Forum war ja eigentlich 'Probleme, Winapi,conio.h' oder so ähnlich...also egal^^.
Da ich auf dieses Tutorial
http://www.win-api.de/tutorials.php?Ses ... efbe2bd14c
verwiesen wurde, wollte ich es einfach einmal ausprobieren. Das (01.) war einfach und lief fehlerfrei, (02.) jedoch nicht.

Code: Alles auswählen


//tutorial --> http://www.win-api.de/tutorials.php?tutid=3&SessID=9022971a9c88b9411e350cefbe2bd14c
#define STRICT
#include<windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
const char szAppName[]="Ein eigenes Fenster";

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
    HWND hWnd;     
    MSG msg;        
    WNDCLASS wc;    


    wc.style        =   CS_HREDRAW |CS_VREDRAW;     
    wc.lpfnWndProc  =   WndProc;                    
    wc.cbClsExtra   =   0;
    wc.cbWndExtra   =   0;     

    wc.hInstance    =   hInstance;   
    wc.hCursor      =   LoadCursor(NULL,IDC_ARROW);   
    wc.hIcon        =   LoadIcon(NULL,IDI_APPLICATION);         
    wc.hbrBackground =  (HBRUSH)GetStockObject(WHITE_BRUSH);   

    wc.lpszClassName=   szAppName;     
    wc.lpszMenuName =   NULL;           

    RegisterClass(&wc);                 

    hWnd = CreateWindow(szAppName,   
                        "Titelleiste",         
                        WS_OVERLAPPEDWINDOW,    
                        CW_USEDEFAULT,          
                        CW_USEDEFAULT,          
                        CW_USEDEFAULT,          
                        CW_USEDEFAULT,          
                        NULL,
                        NULL,
                        hInstance,              
                        NULL);
    ShowWindow(hWnd, iCmdShow);
    UpdateWindow(hWnd);

    while (GetMessage(&msg,NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;      
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
        case WM_DESTROY:
        {
            PostQuitMessage(0);
            return 0;
        }
    }
    return DefWindowProc(hWnd, message, wParam, lParam);
}



Bei jedem Kompilieren wird mir die Fehlermeldung - undefined reference to '_GetStockObject@4' - angezeigt.
Ich bentze Code::Blocks, doch das dürfte ja eigentlich keine Rolle spiele. Ich habe auch gelesen, dass es irgendwie ein Linkerfehler ist.
Wäre nett, wenn jemand Rat wüsste.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Fehler : undefined reference to '_GetStockObject@4'

Beitrag von Xin » Fr Mär 06, 2009 9:53 pm

Diese Zeile macht Ärger:

Code: Alles auswählen

 wc.hbrBackground =  (HBRUSH)GetStockObject(WHITE_BRUSH);   
Du bindest einen Header ein, der dem Compiler erklärt, dass es diese Funktion gibt, also kompiliert das Programm durch.
Beim Linken findet der Linker die Funktionen allerdings nicht.

Wenn Du nun hier schaust: http://msdn.microsoft.com/en-us/library/aa921556.aspx, dann findest Du dort unter Requirements:
MSDN hat geschrieben:Library: coredll.lib
Öffne in Codeblocks die Projekteinstellungen und füge als benötigte statische Lib die coredll.lib hinzu. Dann sollte es laufen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

darkangel
Beiträge: 17
Registriert: Sa Jan 17, 2009 9:26 pm
Kontaktdaten:

Re: Fehler : undefined reference to '_GetStockObject@4'

Beitrag von darkangel » Fr Mär 06, 2009 10:55 pm

Ahh..danke.
Doch ein Problem habe ich leider noch. Wenn coredll.lib einbinden will und "coredll.lib" eingebe, wird diese beim Kompilieren nicht gefunden.
Also muss ich doch einen Pfad angeben, oder?
Allerdings habe ich meinen ganzen PC bereits nach "coredll.lib" durchsucht und nichts gefunden.
Irgendwo im Code::Blocks- oder MinGW-Verzeichnis müsste diese datei doch sein, oder etwa nicht?

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Fehler : undefined reference to '_GetStockObject@4'

Beitrag von Kerli » Fr Mär 06, 2009 11:31 pm

darkangel hat geschrieben:Doch ein Problem habe ich leider noch. Wenn coredll.lib einbinden will und "coredll.lib" eingebe, wird diese beim Kompilieren nicht gefunden.
Also muss ich doch einen Pfad angeben, oder?
Allerdings habe ich meinen ganzen PC bereits nach "coredll.lib" durchsucht und nichts gefunden.
Irgendwo im Code::Blocks- oder MinGW-Verzeichnis müsste diese datei doch sein, oder etwa nicht?
Soweit ich weiß sind unter MinGW all Bibliotheken Unixartig bennant. Die Datei wird dann wahrscheinlich wohl eher 'libcoredll.a' heißen. Dann musst du einfach zu den Linkeroptionen oder noch besser zu den Bibliotheken noch "-lcoredll" oder einfach nur "coredll" hinzufügen.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Fehler : undefined reference to '_GetStockObject@4'

Beitrag von cloidnerux » Sa Mär 07, 2009 11:54 am

Wenn du sie nciht findest, dann sind auch keine Dateien mit Dateinamen die das Wort enthalten vorhenden.
Warscheinlich musst du dir noch die Windows SDK downloaden.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten