[PRB] 以外のバリエーションの配列を参照するとスクリプト エラーが発生します。

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:165967
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
現象
スクリプトしようは、コンポーネントによって返される配列の要素を参照、スクリプト エンジンの報告します。
"オブジェクトは、このプロパティまたはメソッドをサポートしない ' <object>: <method> '"
原因
マイクロソフトから提供されるの VBSCRIPT の作業中のスクリプト エンジンのみ VARIANT の SAFEARRAY にインデックスをサポートします。 VBSCRIPT は境界チェックのため以外のバリアント型の配列を受け入れると、エンジンは、この時点で、配列の内容の操作を許可しない、オブジェクトを他のオートメーションに渡します。

JSCRIPT のアクティブなスクリプト エンジンの境界をテストまたは VARIANT を含む任意の型の SAFEARRAY をインデックス作成のサポートを行いません。 ただし、JSCRIPT は SAFEARRAY を 1 つのオートメーション オブジェクトから別に渡すことです。
解決方法
オートメーション オブジェクトは正常に機能のアプリケーションと VBSCRIPT をホストするコンポーネントするには、VARIANT の SAFEARRAY を作成する必要があります。 バリアント型 (Variant) の要素の SAFEARRAY を VBSCRIPT エンジンに返されるのない Variant データをパッケージ化する必要があります。

VBSCRIPT で記述されたスクリプトは、変数のデータ型をチェックするのに、TypeName 関数を使用する必要があります。 TypeName 関数は、文字列"Variant()、"VARIANT の配列を渡す場合、引用符を除くを返します。

JSCRIPT で記述されたスクリプトを使用して typeof 演算子は、変数のデータ型をテストします。 typeof 演算子は、文字列「不明、」JSCRIPT でサポートされていないデータ型の引用符を除くを返します。
状況
これは仕様によるものです。
詳細
VBSARRAY は、単純な Active Template Library (ATL) バージョン 2. 1 コンポーネントのオブジェクトでこの動作を示します。 コンポーネント デュアル インターフェイスの 3 つの方法をサポートする Ivbsa を実装する: TestBstrs、TestVariants、TestPassArray とします。 最初のでは BSTRs の SAFEARRAY を返すを問題を示します。 2 番目は VARIANT で、BSTRs の各パッケージ化して、ソリューションを示します。 3 番目はことがない-Variant 型の配列をコンポーネントから VBSCRIPT または JSCRIPT にコンポーネントに渡さを示します。 データは変わりません。

TestVariants の実装に示します:
      // Return a VARIANT array of VARIANTs which hold BSTRs      STDMETHODIMP Cvbsa::TestVariants(VARIANT * pvaVariant)      {         HRESULT hr = NOERROR;         LPSAFEARRAY psa;         SAFEARRAYBOUND rgsabound[]  = { 3, 0 }; // 3 elements, 0-based         int i;         if (!pvaVariant)         {            return E_INVALIDARG;         }         VariantInit(pvaVariant);         psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound);         if (!psa)         {            return E_OUTOFMEMORY;         }         VARIANT vFlavors[3];         for (i = 0; i < 3; i++)         {            VariantInit(&vFlavors[i]);            V_VT(&vFlavors[i]) = VT_BSTR;         }         V_BSTR(&vFlavors[0]) = SysAllocString(OLESTR("Vanilla"));         V_BSTR(&vFlavors[1]) = SysAllocString(OLESTR("Chocolate"));         V_BSTR(&vFlavors[2]) = SysAllocString(OLESTR("Espresso Chip"));         if (!V_BSTR(&vFlavors[0]) || !V_BSTR(&vFlavors[1]) ||             !V_BSTR(&vFlavors[2]))         {            hr = E_OUTOFMEMORY;            goto Error;         }         {                //Plug references to the data into the SAFEARRAY               LPVARIANT rgElems;               if (FAILED(hr = SafeArrayAccessData(psa,(LPVOID*)&rgElems)))            {               goto Error;            }            for (i = 0; i < 3; i++)            {               rgElems[i] = vFlavors[i];            }            SafeArrayUnaccessData(psa);         }         V_VT(pvaVariant) = VT_ARRAY | VT_VARIANT;         V_ARRAY(pvaVariant) = psa;         return NOERROR;   Error:         for (i = 0; i < 3; i++)         {            if (V_BSTR(&vFlavors[i])            {               VariantClear(&vFlavors[i]);            }         }         return hr;   }				
JSCRIPT コードは、VBSARRAY.HTM、変数のデータ型をチェックするサンプルを付属テスト ページをここには。
      <SCRIPT LANGUAGE=JSCRIPT>      function JScriptSafeArrayTest()      {         pvaBstr = SimpleComponent.TestBstrs()         if (typeof(pvaBstr) == "unknown")         {            Alert("JSCRIPT cannot handle the type returned by TestBstrs()")            SimpleComponent.TestPassedArray(pvaBstr)         }         pvaVariant = SimpleComponent.TestVariants()         if (typeof(pvaVariant) == "unknown")         {         Alert("JSCRIPT cannot handle the type returned by TestVariants()")            SimpleComponent.TestPassedArray(pvaVariant)         }      }      </SCRIPT>				
示す問題と解決策には、手順、次のとおりです。

  1. VBSARRAY.HTM のページのサンプル、サンプル コンポーネント VBSARRAY.DLL の取得に下指示に従った。
  2. VBSARRAY.DLL REGSVR32.EXE のようなツールを使用してコンポーネントを登録します。
  3. Internet Explorer を起動、および負荷テスト ページを VBSARRAY.HTM します。
  4. [ページで、さまざまなボタンをクリックし、結果の動作を観察指示に従います。
サンプル コンポーネントは、アクティブ テンプレート ライブラリ バージョンを含む Visual C++ 5. 0 では Visual Studio 97 環境を 2. 1 を使用して作成されました。 Visual Studio 97 を持っている場合、VBSARRAY プロジェクトを直接読み込むことができます。 任意のエディターのバリアントと、BSTR の両方で、SAFEARRAY が構築する方法を使用して関連するソース ファイル VBSA.CPP を開くことができますそれ以外の場合は、ケースです。 Cvbsa::TestVariants と Cvbsa::TestBstrs、ソース ファイル内の両方の実装を検索します。

以下のファイルが、Microsoft ダウンロード センターからダウンロードできます。
マイクロソフトのサポート ファイルをダウンロードする方法の追加についてはをクリックして以下「サポート技術情報」(Microsoft Knowledge Base) 資料を参照。
119591Q119591 How to Obtain Microsoft Support Files from Online Services
マイクロソフトはこのファイルのウイルスをスキャンします。 マイクロソフトでは、アップロード時点の最新のウイルス検査プログラムを使用しています。 ファイルは、ファイルに不正な変更を防止するセキュリティが強化されたサーバーに格納されます。
関連情報
プラットフォーム SDK 『 オートメーション リファレンス 』

Visual Basic 版言語リファレンスのスクリプト

警告: この記事は自動翻訳されています

プロパティ

文書番号:165967 - 最終更新日: 02/01/2014 04:08:11 - リビジョン: 4.2

Microsoft Visual Basic Scripting Edition 1.1, Visual Basic, Scripting Edition 2.0, Visual Basic, Scripting Edition 3.0, Microsoft JScript 1.0, Microsoft JScript 2.0, Microsoft Internet Explorer 4.0 128 ビット版, Microsoft Active Server Pages 4.0

  • kbnosurvey kbarchive kbdownload kbfile kbprb kbsample kbmt KB165967 KbMtja
フィードバック