C++-Anwendungen verwenden eine strikte Typprüfung

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu C++-Spezifikation - Index


Das Standardschema für die Typprüfung in neuen C++-Anwendungen ist STRICT (entspricht dem Setzen von #define STRICT; dies gilt für Anwendungen für 64-Bit-Windows sowie für 32-Bit-Windows). Anwendungen, die vor Appmethod C++ 2007 erstellt wurden, verwenden weiterhin das frühere Standardschema #define NO_STRICT. Die VCL ergänzt jetzt Windows-Handle-Parameter, damit sie mit dem C++-STRICT-Ergänzungsschema übereinstimmen. Die Compilierung im STRICT-Modus bietet eine erweiterte Typsicherheit und entspricht der nativen Namensergänzung der VCL.

Migration Ihres Quellcodes von NO_STRICT

Sie sollten Anwendungen aktualisieren, die NO_STRICT definieren, damit sie im STRICT-Modus compiliert werden können (der erste Schritt dazu ist das Entfernen der bedingten Definition NO_STRICT, wie in diesem Thema beschrieben). Die VCL stellt aber Einsprungspunkte für Anwendungen bereit, die NO_STRICT definieren, und wenn Ihr Code nicht im STRICT-Modus compiliert wird, können Sie weiterhin NO_STRICT verwenden. Bedenken Sie aber, dass sich dies künftig ändern könnte.

Feststellen, ob eine Anwendung NO_STRICT verwendet

Am schnellsten finden Sie Codeprojekte, für die NO_STRICT definiert ist, durch Durchsuchen Ihrer *.cbproj-Dateien nach NO_STRICT.

Hinweis: Appmethod C++-Projektdateien (.cbproj-Dateien) können im Quelltext-Editor nicht angezeigt oder bearbeitet werden und sollten nicht in einem anderen Editor geändert werden. Sie können aber eine .cbproj-Datei mit einem anderen Editor oder einem Hilfsprogramm für die Suche durchsuchen.

Bei bestimmten Projekten können Sie die Definition NO_STRICT in der IDE entfernen, wie in den folgenden Schritten beschrieben.

Entfernen der konditionalen Definition NO_STRICT

  1. Öffnen Sie ein Projekt, in dem NO_STRICT definiert ist.
  2. Wählen Sie Projekt > Optionen > C++ (Gemeinsame Optionen) (das ist die oberste Seite im Dialogfeld "Projektoptionen").
  3. Wählen Sie im Feld Build-Konfigurationen oben auf der Seite die Konfiguration aus, die die konditionale Definition STRICT verwenden soll (z. B. die Konfiguration Basis).

    Hinweis: Wenn das Feld Bedingungen den Eintrag "Wert erben aus <Konfigurationsname>" enthält, müssen Sie die angegebene übergeordnete Konfiguration (angegeben unter <Konfigurationsname>) im Feld Build-Konfiguration auswählen.

  4. Markieren Sie im Feld Bedingungen den Eintrag NO_STRICT, und löschen Sie ihn.
  5. Klicken Sie im Dialogfeld Bedingungen auf OK.
  6. Klicken Sie im Dialogfeld Projektoptionen auf OK.
  7. Erzeugen Sie Ihr Projekt neu, und korrigieren Sie alle Fehler, die als Ergebnis der Typprüfung insbesondere in Aufrufen von Windows-Prozeduren auftreten könnten.

Hinzufügen der Definition STRICT (optional)

Das Entfernen der konditionalen Definition NO_STRICT ist identisch mit dem Setzen von STRICT, weil STRICT die Vorgabeeinstellung ist. Sie können aber optional die konditionale Definition STRICT mit den folgenden Schritten hinzufügen:

  1. Wählen Sie Projekt > Optionen > C++ (Gemeinsame Optionen) (das ist die oberste Seite im Dialogfeld "Projektoptionen").
  2. Wählen Sie im Feld Build-Konfigurationen oben auf der Seite die Konfiguration aus, die die konditionale Definition STRICT verwenden soll (z. B. die Konfiguration Basis).

    Hinweis: Wenn das Feld Bedingungen den Eintrag "Wert erben aus <Konfigurationsname>" enthält, müssen Sie die angegebene übergeordnete Konfiguration (angegeben unter <Konfigurationsname>) im Feld Build-Konfiguration auswählen.

  3. Klicken Sie im Feld Bedingungen auf die Ellipsen-Schaltfläche Ellipse.
  4. Geben Sie im Dialogfeld Bedingungen in das Eingabefeld den Text STRICT ein, und klicken Sie auf Hinzufügen.
  5. Klicken Sie im Dialogfeld Bedingungen auf OK.
  6. Klicken Sie im Dialogfeld Projektoptionen auf OK.
  7. Erzeugen Sie Ihr Projekt neu, und korrigieren Sie alle Fehler, die als Ergebnis der Typprüfung insbesondere in Aufrufen von Windows-Prozeduren auftreten könnten.

Probleme bei der Typüberprüfung mit älteren Windows-Typen

Vor Windows 3.1 hatten Windows-Typen, wie HWND und HMENUS, den Typ void *. Eine Windows-Prozedur konnte dadurch mit HWND oder HMENUS als Parameter aufgerufen werden. Windows konnte dies nicht unterscheiden. Mit der Einführung von Windows 3.1 wurden viele dieser Typen in eindeutige Typen geändert. Windows kann jetzt einen Aufruf mit einem falschen Typ erkennen.

Diese Änderung übertrug Entwicklern von alten Anwendungen eine riesige Aufgabe: sie müssen die Typen der Parameter in diesen Windows-Prozedurenaufrufen ändern. Die konditionale Definition NO_STRICT erleichtert diese Konvertierung. Mit NO_STRICT stellt die VCL Eintrittspunkte für Überladungen von Windows-Prozeduren bereit, die die alten Parametertypen akzeptieren und die Konvertierung durchführen.

Siehe auch