Nicht aufgeloestes externes Symbol



  • Also ich weiß nicht genau in welches Forum ich das posten soll, aber ich glaube hier sollte das richtig sein. Ich habe mir ein paar Funktionen geschrieben um den Umgang mit der WinAPI und DirectX zu erleichtern. Dabei habe ich folgende Dateien "abc.h" und "abc.cpp" (fiktiv). In der Headerdatei stehen eben ein paar Makrodefinitionen und Funktionsprototypen, während in der .cpp Datei die Implementierung steht. Auszug(Header-Datei):

    .
    .
    .
    bool DDrawInit(HWND hwnd,LPDIRECTDRAW7 lpdd,unsigned short width=640, unsigned short height=480, unsigned short bbp=8);
    HWND MyCreateWindow(HINSTANCE hInstance, char* name,unsigned short width=640, unsigned height=480);
    

    In der .cpp Datei habe ich dann eben die Funktion geschrieben 😉 . Dabei wird eben die Struktur WNDCLASSEX initialisiert, dann das Fenster "registriert" und schließlich mit

    hWnd = CreateWindowEx(NULL,name,name,
    WS_POPUPWINDOW|WS_VISIBLE,0,0,width,height,NULL,NULL,
    hInstance,0);
    return hWnd;
    

    erstellt. Dann habe ich noch eine weitere .cpp Datei in das Projekt aufgenommen in der sich dann die WinMain und die Fensterfunktion befindet (Main.cpp). Wenn ich nun innerhalb der WinMain folgenden Code habe

    MSG lpMsg;
    HWND hwnd;
    hwnd=MyCreateWindow(hInstance,"test");
    

    kommt folgender Fehler beim Linken:
    ain.obj : error LNK2001: Nichtaufgeloestes externes Symbol "struct HWND__ * __cdecl MyCreateWindow(struct HINSTANCE__ *,char *,unsigned short,unsigned int)" (?MyCreateWindow@@YAPAUHWND__@@PAUHINSTANCE__@@PADGI@Z)

    Das komische aber ist, wenn ich z.B analog die Funktion DDrawInit aufrufe(und den Aufruf von MyCreateWindow auskommentiere) kompiliert und linkt er anstandslos.
    Danke schon mal im vorraus..

    [ Dieser Beitrag wurde am 16.03.2003 um 22:10 Uhr von nep editiert. ]



  • Hast du die Header-Dateien auch eingebunden? 🙄



  • klaro :o ausserdem würde dann auch ein anderer Fehler kommen



  • Und wie sieht es mit der Lib aus? Linkst du die auch mit?



  • hm du meinst jetzt wohl ddraw.lib + dxguid.lib oder ? weil ansonsten muss man ja nix explizit hinzufügen (für winapi)



  • tja, wenn ich das so spontan betrachte....
    hmmm, vielleicht liegt's daran, dass du beim Aufruf deiner Funktion MyCreateWindow nur zwei Parameter übergibts und der Compiler denkt, dass du irgendwas überladen willst. Probiers mal, indem du die Bildschirmbreite und Höhe als Zahlenwert mitübergibst, also vielleicht so:

    //Hier der Funktionsaufruf
    hwnd=MyCreateWindow(hInstance,"test",640,480);
    

    hmmm, wahrscheinlich war das Blödsinn, was ich dir hier gepostet hab....
    sehe gerade, dass du die Funktion ja schon überprüft hast....
    *grübel*
    dann vielleicht noch was.
    Wenn ich das richtig verstanden hab, is hWnd in der Main.cpp deklariert.
    Du willst aber in der Abc.cpp mit

    hwnd=MyCreateWindow(hInstance,"test");
    

    dem Handle einen Wert zuweisen. Wahrscheinlich kennt der hWnd in der Datei abc.cpp nicht.
    Probier mal, die Deklaration (HWND hWnd;) in ne Header-Datei(z.B."main.h") zu schreiben, und die dann in abc.cpp und main.cpp includieren...
    Ansonsten bin ich vorerst ratlos... also,
    viel Erfolg, gruß
    e-the-real



  • Also an den Parametern liegt es nicht. In der MyCreateWindow-Funktion(abc.cpp) erstelle ich mit der CreateWindowEx-Funktion ein Fenster und weise es einem Handle zu, welches ich dann als Rückgabewert der Funktion benutze. In Main.cpp habe ich dann eben auch eine HWND-Variable, der ich dann den Rückgabewert der MyCreateWindow-Funktion zuweise. Das ist doch ok...

    Aber das ist echt komisch, weil der Fehler nur bei der MyCreateWindow-Funktion auftritt..


Anmelden zum Antworten