В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

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

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:165967
Заявление об отказе относительно содержимого статьи о продуктах, поддержка которых прекращена
Эта статья содержит сведения о продуктах, поддержка которых корпорацией Майкрософт прекращена. Поэтому она предлагается как есть и обновляться не будет.
Проблема
При попытке сценария ссылаться на элементы в массиве, возвращаемые компонентом, сообщает обработчику сценария:
"Объект не поддерживает это свойство или метод" <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 в исходном файле.

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

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

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 165967 — последний просмотр: 11/14/2010 02:28:00 — редакция: 2.0

Microsoft Active Server Pages 4.0

  • kbdownload kbfile kbprb kbsample kbmt KB165967 KbMtru
Отзывы и предложения