System.Variants.DispatchUnsignedAsSigned
Delphi
DispatchUnsignedAsSigned: Boolean;
C++
extern DELPHI_PACKAGE bool DispatchUnsignedAsSigned;
Eigenschaften
Typ | Sichtbarkeit | Quelle | Unit | Übergeordnet |
---|---|---|---|---|
variable | public | System.Variants.pas System.Variants.hpp |
System.Variants | System.Variants |
Beschreibung
Weist die Laufzeit an, vorzeichenlose Werte als Integerwerte mit Vorzeichen zu senden. Das Setzen dieser globalen Variable ist für Automatisierungsserver hilfreich.
Delphi unterstützt die Weiterleitung von Word-, LongWord- und UInt64-Parametern als vorzeichenlose Integerwerte (VT_UI2, VT_UI4 bzw. VT_UI8). TOleEnum ist ein Alias für ein LongWord, und beim Importieren von Typbibliotheken in Delphi werden Aufzählungen vorzeichenlos deklariert. Das Ergebnis ist, dass Aufzählungen als VT_UI4 weitergeleitet werden. Automatisierungsserver, wie MS-Excel, verarbeiten aber vorzeichenlose Aufzählungen nicht. Daher könnte der folgende Code fehlschlagen:
V.Insert(TOLEEnum(xlShiftDown)); // Insert in Range
Verwenden Sie, um diesen Fehler ohne Zurücksetzen der Automatisierungsunterstützung für vorzeichenlose Integerwerte zu vermeiden, die globale Variable System.Variants.DispatchUnsignedAsSigned, mit der Sie die Laufzeit anweisen, vorzeichenlose Werte als Integerwerte mit Vorzeichen zu senden.
So wird diese Variable gesetzt:
{$IF CompilerVersion >= 23}
{$IF DECLARED(System.Variants.DispatchUnsignedAsSigned)}
System.Variants.DispatchUnsignedAsSigned := True;
{$IFEND}
{$IFEND}
Nehmen Sie den obigen Code in den initialization-Abschnitt einer Unit des Automatisierungs-Clients auf.
HINWEIS: Die obigen Erläuterungen betreffen nur die Variant- und DispInterface-basierte Automatisierung. D.h., Automatisierungsaufrufe über vtable/interface sind von diesem Fehler und der hier beschriebenen Lösung nicht betroffen.