Neukompilierung eines alten DirectX-Spiels mit dem alten DirectX lauffähig?



  • Wenn ich den Quellcode von einem alten Spiel habe, das auf einer alten DirectX-Version aufbaut, sagen wir DirectX 7, und ich kompiliere das Spiel neu, habe aber auf meinem Rechner das DirectX 9 SDK installiert, wie ist das dann? Wird das Spiel trotzdem auf einem Rechner laufen, der DirectX 7 oder 8 installiert hat, weil ja nur die alten Funktionen benutzt werden? Oder kann die neu kompilierte Exe nur noch mit DirectX 9 ausgeführt werden? Wenn ich also will, dass das Spiel wieder die gleiche Kompatibilität hat wie damals, muss ich dann extra ein altes DirectX SDK auftreiben und dagegen linken oder reicht das Kompilieren mit der neuesten Version?



  • Programme werden immer gegen eine bestimmte Version von DirectX gelinkt. Also wenn man gegen die Libs von DirectX 7 linkt ist das Programm unter DirectX 7 lauffähig und kann natürlich auch nur dessen Funktionen nutzen.

    Du musst nur gucken ob die alten Versionen noch im SDK vorhanden sind. Es sind immer auch alte Versionen mit im SDK, aber bei den aktuellen SDKs sind die Libs für DirectX 7 nicht mehr dabei.



  • Nun ja, nehmen wir mal an, ich benutze in meinem Programm die Header-Datei "ddraw.h" und linke gegen "ddraw.lib". Da hab ich ja so gesehen keine explizite Angabe irgendeiner Version. Es gibt ja kein "ddraw5.h", "ddraw6.h" oder "ddraw7.h". Obwohl es trotzdem verschiedene Versionen von DirectDraw gab. (DirectDraw ist ja nicht seit Version 1 exakt gleich geblieben.)
    So, ich linke also ganz allgemein gegen "ddraw.h"/"ddraw.lib". Und wenn ich jetzt zum Beispiel das DirectX 7 SDK installiert habe (mit der siebener Version von "ddraw.h"/"ddraw.lib") und damit kompiliere, mein Programm aber nur Funktionen benutzt, die schon in DirectX 5 vorhanden waren, würde das Programm dann auf einem Computer laufen, der nur die DirectX 5 Runtime installiert hat?



  • Ok, ich bin von d3d ausgegangen, da ist alles nummeriert.

    Möglich wäre es schon das es mit einer älteren Version läuft, solange alle verwendeten Funktionen vorhanden sind. Es könnte aber auch sein das da irgendwo die Version abgefragt wird um später Fehler zu vermeiden.



  • Knallkopp schrieb:

    Nun ja, nehmen wir mal an, ich benutze in meinem Programm die Header-Datei "ddraw.h" und linke gegen "ddraw.lib". Da hab ich ja so gesehen keine explizite Angabe irgendeiner Version. Es gibt ja kein "ddraw5.h", "ddraw6.h" oder "ddraw7.h". Obwohl es trotzdem verschiedene Versionen von DirectDraw gab. (DirectDraw ist ja nicht seit Version 1 exakt gleich geblieben.)
    So, ich linke also ganz allgemein gegen "ddraw.h"/"ddraw.lib". Und wenn ich jetzt zum Beispiel das DirectX 7 SDK installiert habe (mit der siebener Version von "ddraw.h"/"ddraw.lib") und damit kompiliere, mein Programm aber nur Funktionen benutzt, die schon in DirectX 5 vorhanden waren, würde das Programm dann auf einem Computer laufen, der nur die DirectX 5 Runtime installiert hat?

    Wenn du gegen eine bestimmte Version von DirectDraw compilieren willst, dann musst du DIRECTDRAW_VERSION definieren. Und zwar natürlich bevor du das "ddraw.h" File inkludierst:

    #define DIRECTDRAW_VERSION 0x400 // nur Features bis DirectDraw 4 verwenden
    
    #include <ddraw.h>
    

Anmelden zum Antworten