System.Variants.DispatchUnsignedAsSigned
Delphi
DispatchUnsignedAsSigned: Boolean;
C++
extern DELPHI_PACKAGE bool DispatchUnsignedAsSigned;
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
variable | public | System.Variants.pas System.Variants.hpp |
System.Variants | System.Variants |
説明
符号なしの値を符号付き整数として送信するようランタイムに指示します。このグローバル変数を設定すると、オートメーション サーバーに役に立ちます。
Delphi では、Word 型、LongWord 型、UInt64 型のパラメータを符号なし整数(それぞれ VT_UI2、VT_UI4、VT_UI8)としてディスパッチする機能をサポートしています。TOleEnum は LongWord のエイリアスであり、Delphi タイプ ライブラリ インポータでは列挙型を符号なしとして宣言します。その結果、列挙型は VT_UI4 としてディスパッチされます。ただし、Microsoft Excel などのオートメーション サーバーでは、列挙型が符号なしとしてディスパッチされた場合は、それらを処理しません。そのため、次のようなコードはエラーになるおそれがあります。
V.Insert(TOLEEnum(xlShiftDown)); // Insert in Range
オートメーションでの符号なし整数のサポートを維持しつつこのエラーを回避するには、System.Variants.DispatchUnsignedAsSigned グローバル変数を使用して、符号なしの値を符号付き整数として送信するようランタイムに指示します。
この変数の設定方法は以下のとおりです。
{$IF CompilerVersion >= 23}
{$IF DECLARED(System.Variants.DispatchUnsignedAsSigned)}
System.Variants.DispatchUnsignedAsSigned := True;
{$IFEND}
{$IFEND}
オートメーション クライアントのいずれかのユニットの initialization セクションに上記のコードを追加します。
メモ: この影響を受けるのは、バリアントベースおよびディスパッチ インターフェイスベースのオートメーションの場合だけです。つまり、vtable やインターフェイスによるオートメーション呼び出しの場合は、ここで説明したエラーおよび回避策の影響を受けません。