Probleme die exe des Professors auszuführen oder das Projekt zu compilen



  • Hi,

    Für diese wie für viele der folgenden Aufgaben benötigen Sie das DirectX SDK. Es handelt sich hierbei um das Standard SDK für die PC Spieleprogrammierung. Sie können es sich von der Microsoft Seite herunterladen wenn Sie es nicht besitzen.

    Dies erklärt der Professor vor der zweiten Übung in der Aufgabenstellung.

    Ich habe DXSDK_Jun10.exe installiert und besitze Visual Studio 2017.

    Beim start seiner mitgelieferten Lösungs-exe erscheint die Meldung:

    Das Programm kann nicht gestartet werden, da MSVCR100D.dll auf dem Computer fehlt. Installieren Sie das Programm erneut, um das Problem zu beheben.

    Ich habe die DLL von https://www.dll-files.com/msvcr100.dll.html heruntergeladen und in system32 und syswow64 kopiert. Die Dateien waren schon vorhanden. Ich habe die alten umbenannt.

    Wenn ich das mitgelieferte Projekt in Visual Studio 2017 öffne und compile dann erscheint:

    1>------ Erstellen gestartet: Projekt: CircleIntersect, Konfiguration: Debug Win32 ------
    1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.Cpp.Platform.targets(55,5): error MSB8020: Die Buildtools für Visual Studio 2010 (Plattformtoolset = "v100") wurden nicht gefunden. Installieren Sie zum Erstellen mithilfe der v100-Buildtools die Visual Studio 2010-Buildtools. Alternativ können Sie ein Upgrade auf die aktuellen Visual Studio-Tools durchführen, indem Sie das Menü "Projekt" auswählen oder mit der rechten Maustaste auf die Projektmappe klicken und dann "Projektmappe neu zuweisen" auswählen.
    1>Die Erstellung des Projekts "CircleIntersect.vcxproj" ist abgeschlossen -- FEHLER.
    ========== Erstellen: 0 erfolgreich, 1 fehlerhaft, 0 aktuell, 0 übersprungen ==========

    Was ist das Problem? Was muss ich tun?

    Danke - Enomine



  • Das ist die falsche Version von der Anwendung. Dein Prof hat die Anwendung im Debug-Modus erstellt (und die dafür benötigen DLLs - sieht man am 'D' im Namen - dürfen nicht verteilt werden).

    Die "MSVCR100D.dll" sowie das Projekt gehört zu Visual Studio 2010, wie man auch an der Fehlermeldung sieht.

    Hast du schon

    ...oder mit der rechten Maustaste auf die Projektmappe klicken und dann "Projektmappe neu zuweisen" auswählen.

    versucht?



  • Nach einfügen der richtigen DLL (also die mit D) funktioniert die exe-Datei des Professors.

    Danke - Enomine



  • Ich habe das Projekt auf die SDK-Version 10.0.15063.0 neu zugewiesen.
    Dann lässt sich das Projekt nicht compilieren.
    Es erscheinen 100 Warnungen, ich sehe keine Fehler, trotzdem sagt er nachher dass es fehlerhaft sei.

    Aktuell bin ich mir unsicher, ob dies daran liegt, dass ich die Aufgabe noch nicht implementiert habe oder ob es jetzt schon zumindest compilierbar sein müsste.

    EDIT: Hab jetzt doch einen error ("mehrdeutige Funktion") in der Mitte entdeckt.

    1>------ Erstellen gestartet: Projekt: CircleIntersect, Konfiguration: Debug Win32 ------
    1>PrimitivePainter.cpp
    [...]
    1>c:\users\enomine\downloads\spieleprogrammierung-dokumente\aufgabe2material\circleintersect\dxut\dxutenum.cpp(3976): error C2668: "abs": Mehrdeutiger Aufruf einer überladenen Funktion
    1>c:\program files (x86)\windows kits\10\include\10.0.15063.0\ucrt\stdlib.h(363): note: kann "__int64 abs(const __int64) throw()" sein
    1>c:\program files (x86)\windows kits\10\include\10.0.15063.0\ucrt\stdlib.h(358): note: oder "long abs(const long) throw()"
    1>c:\program files (x86)\windows kits\10\include\10.0.15063.0\ucrt\stdlib.h(288): note: oder "int abs(int)"
    1>c:\users\enomine\downloads\spieleprogrammierung-dokumente\aufgabe2material\circleintersect\dxut\dxutenum.cpp(3976): note: bei Anpassung der Argumentliste "(float)"
    1>DXUT.cpp
    [...]
    1>Code wird generiert...
    1>Die Erstellung des Projekts "CircleIntersect.vcxproj" ist abgeschlossen -- FEHLER.
    ========== Erstellen: 0 erfolgreich, 1 fehlerhaft, 0 aktuell, 0 übersprungen ==========

    EDIT: Ich habe diese Stelle mal nachgesehen. Die Datei hat 4000 Zeilen. Die wird wohl kaum von meinem Professor sein. Ich vermute eine mitgereichte Bibliothek.
    Werden in VS2017 solche Sachen als Fehler markiert und in VS2010 noch nicht?

    Was ist das Problem?

    Betreffende Stelle:

    float fCurRanking = abs( float( displayMode.RefreshRate.Numerator ) / fDenom1  -
                                                 float( refreshRateMatch.Numerator ) / fDenom2 );
    

    Danke - Enomine



  • Bitte verschieben nach C++. Das wusste ich noch nicht als ich den Thread erstellte.

    Danke - Enomine



  • Ich habe dieses Problem gelöst, indem ich in der entsprechenden Datei auf (long long) gecastet habe. Sogleich taucht das nächste Problem auf:

    1>c:\users\enomine\downloads\spieleprogrammierung-dokumente\aufgabe2material\circleintersect\dxut\dxutenum.cpp(3976): warning C4244: "Initialisierung": Konvertierung von "__int64" in "float", möglicher Datenverlust
    1>dxerr.lib(dxerrw.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__vsnwprintf" in Funktion ""long __stdcall StringVPrintfWorkerW(unsigned short *,unsigned int,unsigned int *,unsigned short const *,char *)" (?StringVPrintfWorkerW@@YGJPAGIPAIPBGPAD@Z)".
    1>C:\Users\Enomine\Downloads\Spieleprogrammierung-Dokumente\Aufgabe2Material\CircleIntersect\Debug\CircleIntersect.exe : fatal error LNK1120: 1 nicht aufgelöste Externe
    1>Die Erstellung des Projekts "CircleIntersect.vcxproj" ist abgeschlossen -- FEHLER.
    ========== Erstellen: 0 erfolgreich, 1 fehlerhaft, 0 aktuell, 0 übersprungen ==========

    Danke - Enomine





    1. Googeln nach StringVPrintfWorkerW ist bereits ausreichend um eine Erklärung zu finden wie man das Problem löst.
    2. Ich rate dir ne englische Visual Studio Version zu verwenden. Die gibt dir dann englische Fehlermeldungen, und die lassen sich dann besser googeln. Ansonsten nimm statt der Fehlermeldung den Fehlercode, also in diesem Fall "LNK2019" - natürlich in Verbindung mit den "Daten" zu dem Fehler, also in diesem Fall dem Funktionsnamen "StringVPrintfWorkerW".


  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum Spiele-/Grafikprogrammierung in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Dankeschön für die tolle Hilfe!
    Korrekt war es "legacy_stdio_definitions.lib" in die Liste im Linker hinzuzufügen, wie von Swordfish verlinkt.

    Danke - Enomine