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 を使用するコードはスクリプト コードと同じように表示されます。