System.Variants.DispatchUnsignedAsSigned

De RAD Studio API Documentation
Aller à : navigation, rechercher

Delphi

DispatchUnsignedAsSigned: Boolean;

C++

extern DELPHI_PACKAGE bool DispatchUnsignedAsSigned;

Propriétés

Type Visibilité  Source Unité  Parent
variable public
System.Variants.pas
System.Variants.hpp
System.Variants System.Variants

Description

Indique à l'exécution d'envoyer des valeurs non signées en tant qu'entiers signés. La définition de cette variable globale est utile pour les serveurs Automation.


Delphi supporte la répartition des paramètres Word, LongWord et UInt64 en tant qu'entiers non signés (c'est-à-dire respectivement VT_UI2, VT_UI4 et VT_UI8). TOleEnum est un alias LongWord, et l'importateur de bibliothèques de types Delphi déclare les énumérations en tant que non signées. Le résultat net est que les énumérations sont réparties en tant que VT_UI4. Toutefois, les serveurs Automation tels que MS-Excel ne traitent pas les énumérations quand elles sont réparties en tant que non signées. Ainsi, le code suivant peut échouer :

 
   V.Insert(TOLEEnum(xlShiftDown)); // Insert in Range

Pour éviter cet échec sans restaurer le support automation pour les entiers non signés, utilisez la variable globale System.Variants.DispatchUnsignedAsSigned pour indiquer à l'exécution d'envoyer des valeurs non signées en tant qu'entiers signés.

Voici comment définir cette variable :

 
  {$IF CompilerVersion >= 23}
  {$IF DECLARED(System.Variants.DispatchUnsignedAsSigned)}
    System.Variants.DispatchUnsignedAsSigned := True;
  {$IFEND}
  {$IFEND}

Placez le code ci-dessus dans la section initialization d'une des unités de votre client Automation.

REMARQUE : Ce qui précède affecte seulement l'automation basé sur Variant- et DispInterface. Ainsi, les appels automation via vtable/interface ne sont pas affectés par l'échec et la solution décrite ici.

Voir aussi