PRB: Ошибка сценария появляется содержащие ссылки не переменная массива

Переводы статьи Переводы статьи
Код статьи: 165967 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

Проблема

При попытке сценария ссылаться на элементы в массиве, возвращаемые компонентом, сообщает обработчику сценария:
"Объект не поддерживает это свойство или метод" <object>. <method>""</method></object>

Причина

VBSCRIPT активный обработчик сценариев поставляемый корпорацией Майкрософт поддерживает только индексирования SAFEARRAYs типа Variant. Хотя VBSCRIPT возможна установка в целях проверки границ массивов не тип variant типа и передачи его в другие автоматизации объектов ядра не разрешает обработку содержимого массива в данный момент.

Активный обработчик сценариев JSCRIPT не поддерживает для проверки границ или индексирования SAFEARRAYs любого типа, включая варианты. Тем не менее JSCRIPT возможна передача SAFEARRAYs из одного объекта автоматизации.

Решение

Для правильной работы с приложениями и компонентами, которые размещены VBSCRIPT объекты автоматизации, следует создать SAFEARRAYs типа Variant. Данных VARIANT не должно быть упаковано в элементах SAFEARRAY в ядро VBSCRIPT VARIANT.

Сценарии, написанные на VBSCRIPT следует использовать функция TypeName, чтобы проверить тип данных переменной. Функция TypeName возвращает строку "Variant()", за исключением кавычек, при передаче массива типа Variant.

Сценарии, написанные на JSCRIPT следует использовать оператор typeof, чтобы проверить тип данных переменной. Оператор typeof возвращает строку "Неизвестный", за исключением квот для типов данных не поддерживается в JSCRIPT.

Статус

Такое поведение является особенностью данного продукта..

Дополнительная информация

VBSARRAY является простой библиотеки шаблонных классов (ATL) версии 2.1 компонент объекта, который демонстрирует это поведение. Компонент реализует два интерфейса Ivbsa, который поддерживает три метода: TestBstrs TestVariants и TestPassArray. Первое описание проблемы, возвращая SAFEARRAY BSTRs. Во втором демонстрируется решение по упаковке каждого BSTRs в значение типа VARIANT. Третий показывает, что массив не 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.DLL и примеры страниц VBSARRAY.HTM.
  2. Зарегистрируйте компонент с помощью средства, такие как Regsvr32.exe VBSARRAY.DLL.
  3. Запуск обозревателя и нагрузочного теста страницы VBSARRAY.HTM.
  4. Следуйте инструкциям на странице различных кнопок и наблюдение за полученный поведение.
Образец компонента был создан с использованием библиотеки ATL версии 2.1, включая Visual C++ версии 5.0 в Visual Studio 97 среды. Если Visual Studio 97, можно загрузить непосредственно VBSARRAY проекта. В противном случае можно открыть соответствующий исходный файл VBSA.CPP в любом редакторе, чтобы увидеть, как создан SAFEARRAY BSTR и VARIANT случаев. Поиск по реализации Cvbsa::TestVariants и Cvbsa::TestBstrs в исходном файле.

Следующие файлы доступны для загрузки из Центра загрузки Майкрософт::
Vbsarray.exe
Дополнительные сведения о загрузке файлов поддержки Майкрософт см. в следующей статье базы знаний Майкрософт::
119591Как загрузить файлы поддержки Microsoft из Интернета
Корпорация Microsoft проверила этот файл на наличие вирусов.. Корпорация Майкрософт использует последние версии антивирусного программного обеспечения, имеющиеся на момент публикации файла.. Файл хранится на защищенных серверах, что предотвращает его несанкционированное изменение..

Ссылки

Справочник по автоматизации SDK платформы

Microsoft Visual Basic Scripting Edition по языку

Свойства

Код статьи: 165967 - Последний отзыв: 14 ноября 2010 г. - Revision: 2.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Active Server Pages 4.0
Ключевые слова: 
kbdownload kbfile kbprb kbsample kbmt KB165967 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке: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