Announcement

Collapse
No announcement yet.

Bedingte Compilierung unter Win98 / WinXP

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bedingte Compilierung unter Win98 / WinXP

    Hallo,

    Ich habe einige alte stabile DB-Anwendungen unter Win98 / Delphi5 entwickelt und muß sie so nach und nach nach Delphi6 WinXP übernehmen (die Win98 Rechner sind bei uns noch eindeutig in der Überzahl).

    Nun habe ich das Problem daß unter Delphi6 einige Dinge anders zu compilieren sind als unter Delphi5 und unter Win98 anders als unter WinXP.

    Zwei Beispiele:

    Win98 kennt RaiseLastWin32Error und unter WinXP heisst die selbe Funktion RaiseLastOSError.

    Unter Delphi5 ist der Nullvalue einer Variante in der Unit system hinterlegt unter Delphi6 steht er in der Unit Variants die Delphi5 unbekannt ist.

    Ich würde deshalb gern meine alten Quellen unter Delphi5 so pflegen, das ich sie auch unter Delphi6 compilieren kann.

    z.B.:

    uses

    Forms,System

    $IFDEF WINXP

    ,Variants

    $ENDIF

    ;

    Leider kann ich keine eindeutigen DEFINES für Win98 / WinXP finden.
    Gibt es irgendwo ein Beschreibung der DEFINES oder hat jemand eine Liste für mich ?

    Danke im Voraus Dieter

  • #2
    Delphi 5: VER130<br>
    Delphi 6: VER140<p>
    // Delphi 5:<br>
    {$IFDEF VER130} ...<p>
    <pre class="sourcecode"><code>
    <b>FUNCTION</b> FuncIsWinXP: Boolean;
    <b>Var</b> VerInfo: TOSVersioninfo;
    <b>BEGIN</b>
    VerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
    Windows.GetVersionEx(verinfo);

    Result := (verinfo.dwMajorVersion &gt; 5) <b>OR</b>
    ((verinfo.dwMajorVersion = 5) <b>AND</b> (verinfo.dwMinorVersion &gt;= 1));
    <b>END</b>;
    <font color="#003399"><i>//-------------------------------------------------------------------------------------------------------------------------</i></font>

    <b>FUNCTION</b> FuncIsWin2k: Boolean;
    <b>Var</b> VerInfo: TOSVersioninfo;
    <b>BEGIN</b>
    VerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
    Windows.GetVersionEx(verinfo);

    Result := (verinfo.dwMajorVersion &gt;= 5);
    <b>END</b>;
    <font color="#003399"><i>//-------------------------------------------------------------------------------------------------------------------------</i></font>

    </code></pre><p>
    Für WinNT oder nicht NT würde ich keinen unterschiedlichen Code erzeugen, wenn es sich nicht vermeiden lässt. Da solltest Du <b>isWin2k</b> das entsprechende zu extrahieren können.<p>
    Schöne Grüße, Mario Noac
    Schöne Grüße, Mario

    Comment


    • #3
      Die Kompilierunterschiede betreffen nur die Delphi-Version. Einen Kompilierunterschied bezüglich Win9x/XP sollte es nicht geben. Wenn man für Win9x kompiliert sollte es auch unter XP funktionieren (Außer es sind von Borland Fehler bei der Übernahme von API-Funtionen gemacht oder MS hat die Schnittstellen geändert).

      Bedingte Kompilierung entsprechend der Delphi-Version kannst Du über folgende Anweisungen durchführen:

      <pre>
      {$IFDEF VER140} // nur Delphi 6
      ...

      {$IFDEF VER130} // nur Delphi 5
      ...

      Wenn Du nun folgendes noch definierst:

      {$IFDEF VER130}
      {$DEFINE DELPHI5_UP}
      {$ENDIF}

      {$IFDEF VER140}
      {$DEFINE DELPHI6_UP}
      {$ENDIF}

      kannst Du mit der Anweisung

      {$IFDEF DELPHI6_UP}
      ...

      eine Kompilieranweisung einfügen, die ab der Delphi-Version 6 gilt.

      Diese DELPHI*_UP-Anweisung solltest Du in eine *.inc-Datei legen, die
      du mittels {$I MYDEFINES.INC} in jede Unit einbindest, die diese Defines benötigt.
      </pre&gt

      Comment


      • #4
        Die Funktion RaiseLastWin32Error ist Delphi-spezifisch und sowohl in Delphi 5 als auch in Delphi 6 vorhanden. In Delphi 6 ist sie halt nur als veraltet gekennzeichnet.<br>
        Fuer das Betriebssystem gibt es keine DEFINEs. Du hast auch keine Betriebssystemabhaengigkeiten genannt

        Comment


        • #5
          Vielen Dank für die prompten Tips

          Diete

          Comment


          • #6
            Moin Heinz-Dieter,<br>
            <br>
            Wenn es sich denn schon nicht vermeiden lässt Funktionen zu benutzen, die in 98/XP unterschiedlich sind (z.B. die Netxxx APIs), musst Du wohl eh' die verschiedenen Versionen zur Laufzeit auswählen, falls das Programm unter beiden Systemen laufen soll.<br>
            Soll es zwei verschiedene Programme für beide Betriebssysteme (bzw. OS Zweige) geben, kannst Du Dir die DEFINES ja auch selber erstellen.<br>
            <br>
            Ciao<br>
            Chri

            Comment

            Working...
            X