System.Variants.DispatchUnsignedAsSigned
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.