HILFE :: Linker Problem



  • Ich habe folgendes Linker Problem:
    Hier erstmal mein hoffentlich fehlerfreier Code(an dem liegt es denke ich nicht):

    //scheiswelt.cpp (ich probiere heute schon den ganzen tag)
    #include <windows.h>
    
    int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
      MessageBox(0, reinterpret_cast<LPCTSTR>("Hallo Welt!"), reinterpret_cast<LPCTSTR>("Mein erstes Programm"), MB_OK);
      return 0;
    }
    

    Einwandfrei oder?

    Und mein Problem wäre:

    1>------ Erstellen gestartet: Projekt: FUCKING HALLO WELT, Konfiguration: Debug Win32 ------
    1>Verknüpfen...
    1>SCHEIS WELT.obj : error LNK2028: unresolved token (0A00002F) "extern "C" int __stdcall MessageBoxW(struct HWND__ *,wchar_t const *,wchar_t const *,unsigned int)" (?MessageBoxW@@$$J216YGHPAUHWND__@@PB_W1I@Z) referenced in function "extern "C" int __cdecl MessageBox(struct HWND__ *,wchar_t const *,wchar_t const *,unsigned int)" (?MessageBox@@$$J0YAHPAUHWND__@@PB_W1I@Z)
    1>SCHEIS WELT.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall MessageBoxW(struct HWND__ *,wchar_t const *,wchar_t const *,unsigned int)" (?MessageBoxW@@$$J216YGHPAUHWND__@@PB_W1I@Z) referenced in function "extern "C" int __cdecl MessageBox(struct HWND__ *,wchar_t const *,wchar_t const *,unsigned int)" (?MessageBox@@$$J0YAHPAUHWND__@@PB_W1I@Z)
    1>Debug\FUCKING HALLO WELT.exe : fatal error LNK1120: 2 unresolved externals
    1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\GliderBugFix\Eigene Dateien\Visual Studio 2005\Projects\FUCKING HALLO WELT\Debug\BuildLog.htm" gespeichert.
    1>FUCKING HALLO WELT - 3 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    Ich habe alle Libs,Header und Bin Directions eingebunden also:
    C:\Programme\Microsoft SDKs\Windows\v6.0\Bin bei Ausführungen
    C:\Programme\Microsoft SDKs\Windows\v6.0\Lib bei Bibliotheken
    C:\Programme\Microsoft SDKs\Windows\v6.0\Include bei Includes

    Weis jemand weiter ich bin echt total am verzweifln ich hoffe einer von euch weis bescheit!



  • Müsste ich vielleicht bei Extras->Optionen->Verweise noch etwas hinzufügen?
    Bitte helft mir.



  • Erstmal ist der Code zwar syntaktisch korrekt - aber inhaltlich wirst du mit diesem Cast nichts lesbares herausbekommen (durch den Cast werden jeweils zwei Zeichen als ein wchar zusammengefasst - und ergeben dann wohl irgendwelche kryptischen Symbole). Richtig wäre es, dort das _T()-Makro zu benutzen.

    Zweitens ist der Linker zu "faul", alle Libs nach möglichen Treffern zu durchsuchen - du mußt ihm schon sagen, welche .LIB Datei(en) er einbinden soll.



  • Achso. Das mit den Casts war ein Krampf aber sonst hat der Compiler halt Fehler gemeldet kannst du /können sie mir die Syntax und/oder die verstellenden Optionen geben?



  • Ich Anfänger:
    So viel zum Thema einfach mal in der MSDN schauen:
    http://forums.microsoft.com/msdn-de/ShowPost.aspx?PostID=2351601&SiteID=9

    Frage: Wie regle ich das mit den vielen Casts wenn ich das "Hallo Welt!" Programm von Wikipedia(http://209.85.135.104/search?q=cache:etrUzCIlVhwJ:de.wikipedia.org/wiki/Liste_von_Hallo-Welt-Programmen+Hallo+Welt+WinAPI&hl=de&ct=clnk&cd=3&gl=de&lr=lang_de&client=opera versuche zu komplimieren, dann kommen folgende Datentypsumwandlungs Build Fehler:

    1>Kompilieren...
    1>SCHEIS WELT.cpp
    1>.\SCHEIS WELT.cpp(23) : error C2440: '=': 'char [8]' kann nicht in 'LPCWSTR' konvertiert werden
    1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    1>.\SCHEIS WELT.cpp(40) : error C2664: 'CreateWindowExW': Konvertierung des Parameters 2 von 'char [8]' in 'LPCWSTR' nicht möglich
    1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    1>.\SCHEIS WELT.cpp(62) : error C2664: 'TextOutW': Konvertierung des Parameters 4 von 'const char [12]' in 'LPCWSTR' nicht möglich
    1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\GliderBugFix\Eigene Dateien\Visual Studio 2005\Projects\FUCKING HALLO WELT\Debug\BuildLog.htm" gespeichert.
    1>FUCKING HALLO WELT - 3 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    

    Die erste Hilfe war schon gut ... muss ich da vielleicht noch eine andere Lib einbinden?



  • C-Chris schrieb:

    Achso. Das mit den Casts war ein Krampf aber sonst hat der Compiler halt Fehler gemeldet

    In solchen Situationen ist ein wild reingeworfener Cast idR die falsche Lösung (auch wenn der Compiler meint "diese Umwandlung erfordert einen reinterpret_cast", sollte der Fehler normalerweise durch Anpassung der verwendeten Typen korrigiert werden).

    kannst du /können sie mir die Syntax und/oder die verstellenden Optionen geben?

    Normalerweise mußt du die richtige Library (user32.lib) in den Projektoptionen unter "Linker" eintragen, damit er sie findet. Wenn dein System so veraltet ist, daß es keine Unicode-WinAPI hat, solltest du dir eine neue Version der Platform SDK besorgen.



  • C-Chris schrieb:

    Die erste Hilfe war schon gut ... muss ich da vielleicht noch eine andere Lib einbinden?

    1. Casten ist immer ganz schlecht!!!!
    2. Umschliesse alls String-Literals mit dem _T-Makro... z.B.:

    #include <tchar.h>
    
     MessageBox(0, _T("Hallo Welt!"), _T("Mein erstes Programm"), MB_OK);
    


  • Ich habe WinXP(C2D,7600GT(512MB),2 GB RAM). Mein System ist also nicht veraltet.
    Und ich habe das neueste SDK gedownloadet.

    Edit:
    Hier der Code:

    #pragma comment(lib,"user32.lib")
    #define STRICT
    #include <windows.h>
    #include <tchar.h>
    
    #include <windows.h> 
    
    int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
    { 
      MessageBox(0, _T("Hallo Welt!"), _T("Mein erstes Programm"), MB_OK); 
      return 0; 
    }
    

    Einer schwere Geburt... 😃

    Vielen Dank für eure Hilfe!

    (Wie schließe ich das Forum?)
    (Mit dem Schließen wirds wohl nicht!!!)

    Wie mache ich das der Linker alle Libs "includet"?

    Sowas wie:

    #pragma comment(lib,LINKALL)
    


  • C-Chris schrieb:

    (Wie schließe ich das Forum?)
    (Mit dem Schließen wirds wohl nicht!!!)

    Nanu, warum willst denn das Forum dicht machen 😃 ?

    C-Chris schrieb:

    Wie mache ich das der Linker alle Libs "includet"?

    Sowas wie:

    #pragma comment(lib,LINKALL)
    

    Wenn Du die Express Ed. verwendest und diese richtig eingerichtet hast, werden automatisch alle wichtigen Libraries eingebunden. Alle weiteren sollten explizit (also zum Beispiel mit #pragma ) eingebunden werden, also nach Bedarf, da dadurch auch Deine Executable größer wird 😉 .



  • C-Chris schrieb:

    Ich habe folgendes Linker Problem:
    Hier erstmal mein hoffentlich fehlerfreier Code(an dem liegt es denke ich nicht):

    Ich habe alle Libs,Header und Bin Directions eingebunden also:
    C:\Programme\Microsoft SDKs\Windows\v6.0\Bin bei Ausführungen
    C:\Programme\Microsoft SDKs\Windows\v6.0\Lib bei Bibliotheken
    C:\Programme\Microsoft SDKs\Windows\v6.0\Include bei Includes

    Weis jemand weiter ich bin echt total am verzweifln ich hoffe einer von euch weis bescheit!

    Wie du siehst habe ich doch bei "C:\Programme\Microsoft SDKs\Windows\v6.0\Lib bei Bibliotheken" das wie gewünscht eingestellt. Was soll ich sonst einstellen. Keine Hilfe in der MSDN. Wie mache ich das? 😕
    edit1:
    Oder welche Libs muss ich noch einbinden?

    edit2:
    Also mit den Libs gibts keinen Stress:

    #pragma comment(lib,"winmm.lib")
    #pragma comment(lib,"dsound.lib")
    #pragma comment(lib,"dinput.lib")
    #pragma comment(lib,"d3dim.lib")
    #pragma comment(lib,"ddraw.lib")
    #pragma comment(lib,"dxguid.lib")
    #pragma comment(lib,"kernel32.lib")
    #pragma comment(lib,"user32.lib")
    #pragma comment(lib,"gdi32.lib")
    #pragma comment(lib,"winspool.lib")
    #pragma comment(lib,"shell32.lib")
    

    Gut Danke an alle!

    edit3:
    Man kann das auch bei Projektoptionen einstellen.


Anmelden zum Antworten