VC++ 2008 Kompilieren



  • skullyan schrieb:

    Was ist der Unterschied zwischen den über den Befehl "#include" eingefügten und den über "#pragma comment(lib, "name-der.lib")" eingefügten Bibliotheken?

    Mit include bindest du Header ein (also Dateien, die nicht kompilierten Quellcode enthalten). Eine lib hingegen ist bereits kompiliert (wie eine exe), die kannst du nicht mit include einbinden (kannst es ja mal versuchen 😉 ). Das geht über die pragma-Anweisung oder die Linker-Settings.

    skullyan schrieb:

    VC++ kompiliert dieses Programm nicht. Wieso?

    Wie wär's, wenn du die Fehlermeldung auch mal postest? 🙄 Mein VC++ kompiliert dieses Progrämmchen nämlich durchaus, also musst du bei deinem VC++ irgendwas anders gemacht haben, als du gepostet hast.



  • _matze schrieb:

    skullyan schrieb:

    Was ist der Unterschied zwischen den über den Befehl "#include" eingefügten und den über "#pragma comment(lib, "name-der.lib")" eingefügten Bibliotheken?

    Mit include bindest du Header ein (also Dateien, die nicht kompilierten Quellcode enthalten). Eine lib hingegen ist bereits kompiliert (wie eine exe), die kannst du nicht mit include einbinden (kannst es ja mal versuchen 😉 ). Das geht über die pragma-Anweisung oder die Linker-Settings.

    skullyan schrieb:

    VC++ kompiliert dieses Programm nicht. Wieso?

    Wie wär's, wenn du die Fehlermeldung auch mal postest? 🙄 Mein VC++ kompiliert dieses Progrämmchen nämlich durchaus, also musst du bei deinem VC++ irgendwas anders gemacht haben, als du gepostet hast.

    Cool, jetzt weiß ich schon mehr!
    😃

    Fehlermeldungen:

    1>(1) : warning C4627: "#include <iostream>": Wird bei der Suche nach Verwendung des vorkompilierten Headers übersprungen.
    1> "stdafx.h" Direktive hinzufügen oder vorkompilierten Header erneut erstellen
    1> : warning C4627: "#include <conio.h>": Wird bei der Suche nach Verwendung des vorkompilierten Headers übersprungen.
    1> "stdafx.h" Direktive hinzufügen oder vorkompilierten Header erneut erstellen
    1>(11) : fatal error C1010: Unerwartetes Dateiende während der Suche nach dem vorkompilierten Header. Haben Sie möglicherweise vergessen, im Quellcode "#include "stdafx.h"" einzufügen?
    1>Das Buildprotokoll wurde unter "" gespeichert.
    1>kuku - 1 Fehler, 2 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========



  • Und hat der Compiler vielleicht Recht? Hast du vergessen, "#include "stdafx.h"" einzufügen? Das sollte ganz nach oben (oder du schaltest precompiled header ab).



  • _matze schrieb:

    Und hat der Compiler vielleicht Recht? Hast du vergessen, "#include "stdafx.h"" einzufügen? Das sollte ganz nach oben (oder du schaltest precompiled header ab).

    Ja, jetzt geht's, aber wieso muss man das einfügen? Das musste ich bisher noch in keinem Compiler/IDE. Wie schaltet man die precompiled header ab?



  • http://msdn.microsoft.com/en-us/library/h552b3ca(vs.80).aspx

    Abschalten kannst du's in den Projekteinstellungen unter C/C++ => Vorkompilierte Header.



  • **Anderes Projekt:

    Fehlermeldungen:**

    1>(43) : error C2664: 'FtpPutFileW': Konvertierung des Parameters 2 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>(45) : error C2664: 'FtpGetFileW': Konvertierung des Parameters 2 von 'const char [14]' 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>(64) : error C2664: 'lstrcpyW': Konvertierung des Parameters 2 von 'const 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>(66) : error C2664: 'lstrcatW': Konvertierung des Parameters 2 von 'const 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>(68) : error C2664: 'GetEnvironmentVariableW': Konvertierung des Parameters 1 von 'const 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>(69) : error C3861: "ShellExecute": Bezeichner wurde nicht gefunden.

    Er sucht wohl nach Abhängigkeiten ("kompilierte Bibliotheken" für den Linker). Diese hab ich auch eingefügt. Unter Projekt/Eigenschaften (ALT+F7)
    Muss ich die Endung ".lib" benutzen? (Hab auch beide varianten probiert. (Muss man die ".lib"'s sonst mit Kommata trennen?) trotzdem kommen diese Fehler. Verlinke ich falsch?

    Für jede Hilfe dankbar! 👍



  • Das sind Fehler des Compilers, nicht des Linkers. Du hast Unicode in deinem Projekt eingestellt, willst es aber gar nicht verwenden (vermute ich mal). Stell mal von Uncode auf MBCS um (unter Allgemein => Zeichensatz), dann flutscht es wieder. Die Alternative ist, konsequent mit Unicode zu programmieren. Da musst du z.B. bei String-Literalen immer ein "L" voranstellen. Also z.B.

    L"meinString"
    


  • _matze schrieb:

    Das sind Fehler des Compilers, nicht des Linkers. Du hast Unicode in deinem Projekt eingestellt, willst es aber gar nicht verwenden (vermute ich mal). Stell mal von Uncode auf MBCS um (unter Allgemein => Zeichensatz), dann flutscht es wieder. Die Alternative ist, konsequent mit Unicode zu programmieren. Da musst du z.B. bei String-Literalen immer ein "L" voranstellen. Also z.B.

    L"meinString"
    

    Ich will ja nicht unbeholfen oder so wirken, aber ich finde

    "Allgemein => Zeichensatz"

    nicht.

    Bei mir steht oben "Datei", "Bearbeiten", "Ansicht", "Projekt", "Erstellen", "Debuggen", "Extras", "Fenster" und "Hilfe".

    😕



  • Nee nee, ich meine in den Projekteinstellungen. Dazu gehst du in deinem Projektmappenexplorer (üblicherweise links, glaube ich, das Ding wo du deine cpp- und h-Dateien siehst 😉 ) auf dein Projekt, klickst rechts und gehst auf Eigenschaften. Wie gesagt, stelle es erstmal von Unicode auf MBCS (multibyte character set) um und beschäftige dich irgendwann später mal mit dem Thema.

    P.S.: Ein paar Stichwörter für die spätere Recherche wären z.B. auch TCHAR und das _T() Makro.



  • _matze schrieb:

    Nee nee, ich meine in den Projekteinstellungen. Dazu gehst du in deinem Projektmappenexplorer (üblicherweise links, glaube ich, das Ding wo du deine cpp- und h-Dateien siehst 😉 ) auf dein Projekt, klickst rechts und gehst auf Eigenschaften. Wie gesagt, stelle es erstmal von Unicode auf MBCS (multibyte character set) um und beschäftige dich irgendwann später mal mit dem Thema.

    P.S.: Ein paar Stichwörter für die spätere Recherche wären z.B. auch TCHAR und das _T() Makro.

    intermediate.manifest : general error c1010070: Failed to load and parse the manifest. Das System kann die angegebene Datei nicht finden.

    Hab alles hinbekommen, jetzt nur noch dieser Fehler. Was tun?



  • Hm, Projekt mal bereinigt und neu erstellt?

    EDIT: Und zeig mal, wie dein ganzer Code mittlerweile aussieht. Wäre recht interessant. Hast du z.B. "#include stdafx;" noch im Code? Das muss natürlich weg, wenn du vorkompilierte Header abgestellt hast.



  • _matze schrieb:

    Hm, Projekt mal bereinigt und neu erstellt?

    EDIT: Und zeig mal, wie dein ganzer Code mittlerweile aussieht. Wäre recht interessant. Hast du z.B. "#include stdafx;" noch im Code? Das muss natürlich weg, wenn du vorkompilierte Header abgestellt hast.

    Ja, das mache ich eigentlich immer.

    #include <iostream>
    #include <conio.h>
    using namespace std;
    
    int main()
    {
        cout << "C++" << endl;
        getch();
        return 0;
    }
    

    Er findet die auszuführende .exe nicht. Also erstellt er sie nicht...?

    😞



  • Hi,
    ich hab da mal ne Frage.

    Wie kann ich in Visual C++ 2008 Express Edition den Compiler so einstellen, dass wenn ich zum Beispiel ein WINAPI Projekt bei mie compiliere, die exe Datei auch andere ausführen können.

    Zur Information:
    Ich habe Service Pack 3 und möchte zum Beispiel, dass es auch jemand starten kann der beispielsweise Service Pack 2 hat oder auch Vista installiert hat.

    Danke schonmla im voraus!

    MfG





  • Thx für die Antwort.

    Werde ich gleich mal ausprobieren.



  • Bzgl. Windows-Versionen musst du einfach auf die Doku achten. Da stehen manchmal Hinweise, ob z.B. eine Funktion erst ab Win2000 verfügbar ist o.ä.



  • _matze schrieb:

    Bzgl. Windows-Versionen musst du einfach auf die Doku achten. Da stehen manchmal Hinweise, ob z.B. eine Funktion erst ab Win2000 verfügbar ist o.ä.

    Und ähm... Habt Ihr auch eine Lösung für mich?
    😋



  • Also wenn du ein ganz neues Projekt erstellst, deinen zuletzt geposteten Code einfügst, Unicode und vorkompilierte Header abstellst, und sonst nix veränderst, sollte es wohl klappen. Kannst du das mal probieren?



  • _matze schrieb:

    Also wenn du ein ganz neues Projekt erstellst, deinen zuletzt geposteten Code einfügst, Unicode und vorkompilierte Header abstellst, und sonst nix veränderst, sollte es wohl klappen. Kannst du das mal probieren?

    Negativ, dann kommt noch diese Fehlermeldung:

    intermediate.manifest : general error c1010070: Failed to load and parse the manifest. Das System kann die angegebene Datei nicht finden.

    Was soll nun wieder das mit dem "Manifest" bedeuten?(Vielleicht sollte ich bei meinem altbewährten Code::Blocks bleiben.... 🙄)




Anmelden zum Antworten