PRB: Chyba skriptu dochází při odkazování na Non variant Array

Překlady článku Překlady článku
ID článku: 165967 - Produkty, které se vztahují k tomuto článku.
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Příznaky

Když skript pokusí reference prvky matice vrácené součást, skriptovací stroj sestav:
<object>"Objekt nepodporuje tuto vlastnost nebo metodu ' <objekt>. <method>'"

Příčina

VBSCRIPT aktivní skriptovací stroj dodávaný společností Microsoft podporuje pouze indexování SAFEARRAYs varianty. Zatímco VBSCRIPT je schopen přijímat matice-varianty typu pro účely kontroly hranici a předávání jiných automatizace objekty, stroj umožnit manipulaci s obsahem pole v tomto okamžiku.

Aktivní skriptovací stroj JSCRIPT neposkytuje podporu pro testování hranice nebo indexování SAFEARRAYs libovolný typ včetně varianty. JSCRIPT je však schopný předáním SAFEARRAYs z jednoho objektu automatizace.

Řešení

Správnou funkci s aplikací a komponent, které jsou hostiteli VBSCRIPT měli vytvořit objekty automatizace SAFEARRAYs varianty. Bez VARIANT dat by měl zabaleny do prvků VARIANT SAFEARRAY vrácena stroje VBSCRIPT.

Funkce TypeName byste ke kontrole typ dat proměnné použít skripty napsané v VBSCRIPT. Funkce TypeName vrátí řetězec "Variant()," vyloučení nabídek, při předání matici varianty.

Skripty napsané v JSCRIPT použijte operátor typeof testovat datový typ proměnné. Operátor typeof vrátí řetězec „ neznámý,"vyloučení nabídek nepodporovaný JSCRIPT datové typy.

Prohlášení

Toto chování je záměrné.

Další informace

VBSARRAY je jednoduchého Active Template knihovna (ATL) verze 2.1 součást objekt, který demonstruje toto chování. Součást implementuje duální rozhraní podporuje tři metody Ivbsa: TestBstrs TestVariants a TestPassArray. První znázorňuje problém vrácením SAFEARRAY BSTRs. Druhý znázorňuje řešení podle balicí každý BSTRs v VARIANT. Třetí znázorňuje, že pole typu VARIANT lze předat z komponenty VBSCRIPT nebo JSCRIPT součásti. Data zůstávají beze změny.

Zde je implementace 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;
   }
				
zde je kód JSCRIPT z VBSARRAY.HTM zkušební stránku součástí ukázkové, který zkontroluje datový typ proměnné:
      <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>
				
Ukazují potíže a řešení, proveďte následující kroky:

  1. Postupujte podle pokynů níže na získání součást ukázkové VBSARRAY.DLL a ukázkové stránky VBSARRAY.HTM.
  2. Zaregistrujte součást VBSARRAY.DLL pomocí nástroje jako jsou například regsvr32.exe.
  3. Spuštění Internet Explorer a zatížení testovací stránka VBSARRAY.HTM.
  4. Postupujte podle pokynů na stránce klepnutím různých tlačítek a pozorování výsledné chování.
Součást ukázkové byla vytvořena pomocí verze knihovny Active Template 2.1 včetně Visual C++ 5.0 v aplikaci Visual Studio 97 prostředí. Pokud máte Visual Studio 97, můžete načíst VBSARRAY projektu přímo. Jinak, otevřete soubor příslušného zdroje VBSA.CPP v libovolném editoru v tématu jak sestavit SAFEARRAY v VARIANT a BSTR případů. Hledání implementace Cvbsa::TestVariants a Cvbsa::TestBstrs ve zdrojovém souboru.

K dispozici jsou Vám následující soubory ze sekce Ke Stažení:
Vbsarray.exe
Další informace o tom, jak stahovat soubory podpory společnosti Microsoft, naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
119591Jak získat soubory podpory společnosti Microsoft ze serverů služeb online
Microsoft tento soubor zkontroloval na výskyt virů. Společnost Microsoft použila aktuální antivirový software, který byl k dispozici v den uveřejnění tohoto článku. Soubor je uložený na zabezpečených serverech neumožňujících neoprávněné změny souborů.

Odkazy

Platformu SDK automatizace reference

Microsoft Visual Basic Scripting Edition jazyková reference

Vlastnosti

ID článku: 165967 - Poslední aktualizace: 3. února 2014 - Revize: 4.2
Informace v tomto článku jsou určeny pro produkt:
  • 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
  • 128bitová verze aplikace Microsoft Internet Explorer 4.0
  • Microsoft Active Server Pages 4.0
Klíčová slova: 
kbnosurvey kbarchive kbmt kbdownload kbfile kbprb kbsample KB165967 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:165967

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com