SORUN: Olmayan Varyant Array ba?vurmak için komut dosyası hatası oluşuyor.

Makale çevirileri Makale çevirileri
Makale numarası: 165967 - Bu makalenin geçerli olduğu ürünleri görün.
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Hepsini aç | Hepsini kapa

Belirtiler

Ne zaman bir komut dosyası bir bileşen tarafından döndürülen bir dizinin başvurmak komut dosyası altyapısı raporlarını çalışır:
<object>"Nesne bu özelliği veya yöntemi desteklemiyor ' <nesne>. <method>'"

Neden

Microsoft tarafından sağlanan VBSCRIPT etkin komut dosyası altyapısı, yalnızca dizin oluşturma, SAFEARRAYs türevlerini destekler. VBSCRIPT değişken olmayan türünde dizi sınırları denetleme amacıyla aramaları kabul edebilen ve bunun için diğer bir Otomasyon geçirmeden nesneler, altyapı şu anda dizi içeriğinin işleme izin vermiyor.

JSCRIPT etkin komut dosyası altyapısı, sınırları sınama veya SAFEARRAYs türevleri de dahil olmak üzere herhangi türdeki dizin oluşturma desteği sağlamaz. Ancak, JSCRIPT SAFEARRAYs bir Otomasyon nesneden diğerine geçirme yeteneğine sahiptir.

Çözüm

Uygulamaları ve VBSCRIPT ana bileşenleri ile düzgün olarak çalışması için <a0></a0>, otomasyon nesne, bu SAFEARRAYs türevlerini oluşturmanız gerekir. Non-VARIANT veri SAFEARRAY, VBSCRIPT alt yapısına döndürülecek VARIANT öğelerinin paketlenmesi.

VBSCRIPT içinde yazılı olan komut dosyaları değişken veri türünü denetlemek için TypeName işlevini kullanmanız gerekir. TypeName işlevi, "Variant() türevlerini dizisi sırasında tırnak işaretleri hariç," dizesini döndürür.

Değişken veri türünü sınamak için JSCRIPT yazılmış komut dosyalarını typeof işletmen kullanmanız gerekir. Typeof işleç, "Bilinmeyen JSCRIPT tarafından desteklenmeyen veri türleri için tırnak işaretleri hariç," dizesini döndürür.

Durum

Bu davranış tasarım yüzündendir.

Daha fazla bilgi

Bir basit Active Template Library'nı (ATL) the VBSARRAY olan sürüm 2.1 Bileşen Nesne bu davranışı gösterir. Bileşen çift Ivbsa üç yöntem destekleyen bir arabirim uygulayan: TestBstrs, TestVariants ve TestPassArray. Ilk olarak SAFEARRAY BSTRs döndürerek, sorunu gösterir. Ikinci çözümü, her biri, bir VARIANT BSTRs ambalaj gösterir. Üçüncü bir dizi olmayan VARIANT türü bileşenden VBSCRIPT ya da JSCRIPT bileşenine geçirilebilir olduğunu gösterir. Verilerin değişmeden kalır.

TestVariants uygulaması aşağıdadır:
      // 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;
   }
				
VBSARRAY.HTM, bir değişkenin veri türü denetleyen örnekle dahil sınama sayfası JSCRIPT koddan burada ise:
      <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>
				
Sorun ve çözüm için <a0></a0>, aşağıdaki adımları gerçekleştirin:

  1. Örnek bileşeni VBSARRAY.DLL edinmek, aşağıdaki yönergeleri izleyin ve <a1>Sayfa</a1> VBSARRAY.HTM örnek.
  2. REGSVR32.EXE gibi bir aracı kullanarak VBSARRAY.DLL bileşenini kaydettirin.
  3. Fırlatma ınternet Explorer ve <a1>Yükle</a1> sınama VBSARRAY.HTM sayfa.
  4. Çeşitli düğmeleri ve sonuçta ortaya çıkan davranış gözleme sayfasında yönergeleri.
Örnek bileşeni, Active Template Library sürüm 2.1, 97 ortam Visual C++ 5.0 ile Visual Studio'da dahil olmak üzere kullanılarak oluşturuldu. Visual Studio 97 varsa, doğrudan VBSARRAY proje yükleyebilirsiniz. Aksi halde, hem DEĞIŞKEN hem de BSTR the SAFEARRAY nasıl oluşturulur görmek için herhangi bir düzenleyicisinde VBSA.CPP ilgili kaynak dosyayı açmak için servis talepleri. Arama Cvbsa::TestVariants hem de kaynak dosyadaki Cvbsa::TestBstrs uygulamasıdır.

Aşağıdaki dosyalar Microsoft Yükleme Merkezi'nden yüklenebilir:
Vbsarray.exe
Microsoft destek dosyalarını karşıdan yükleme konusunda ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
119591Microsoft Destek Dosyaları Çevrimiçi Hizmetler'den Nasıl Alınır
Microsoft bu dosyada virüs taraması yapmıştır. Microsoft, dosyanın kullanıma sunulduğu tarihteki en güncel virüs tarama yazılımını kullanmıştır. Dosya, üzerinde herhangi bir yetkisiz değişiklik yapılmasını engellemeye yardım eden geliştirilmiş güvenliğe sahip sunucularda depolanır.

Referanslar

Platform SDK Otomasyon başvurusu

Microsoft Visual Basic, sürüm ve Dil Başvurusu komut dosyası

Özellikler

Makale numarası: 165967 - Last Review: 8 Şubat 2014 Cumartesi - Gözden geçirme: 4.2
Bu makaledeki bilginin uygulandığı durum:
  • 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-Bit Edition
  • Microsoft Active Server Pages 4.0
Anahtar Kelimeler: 
kbnosurvey kbarchive kbmt kbdownload kbfile kbprb kbsample KB165967 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir: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