C++ では、すべての変数が厳密にタイプ分けされています。 たとえば、x は int として宣言され、y は double として宣言されます。 ただし、ActiveX(Automation)をサポートするスクリプト言語では、Variant や SafeArray のような弱く型指定された変数を使用できます。このため、x という名前の変数には、文字列や整数、またはオブジェクトへのポインタすら含まれている場合があります。 x の正確なタイプは値が割り当てられたときにのみ決定され、x のタイプは値が再割り当てされることにより実行時に変更されます。
CValue および CValueArray クラスは、C++ のように強く型指定された言語の内部で、弱く型指定された変数を扱える便利なクラスです。 CValue は Win32 で使用される VARIANT 構造に似ており、CValueArray は SAFEARRAY 構造に似ています。 通常、変換は CComAPIHandler を使用したとき、またはスクリプトから C++ カスタム コマンドを呼び出すときなどに自動的に行われます。しかし、XSIVariantFromCValue および XSIVariantToCValue 関数を使用して 2 つのタイプの間で変換することも可能です(詳細については、sicppsdk__win32_8.h ヘッダ ファイルのリファレンス ドキュメントを参照してください)。
結果として、BSTR や SAFEARRAY などの難しい ActiveX データ型の知識がなくても、これらのクラスを使用できます。 CValue はオペレータにオーバーロードとさまざまなコンストラクタを提供するためです。これにより VARIANT はより簡単に使用でき、CValue を使用するコードはスクリプト コードと同じように表示されます。