PRB: 스크립트 오류 비 Variant 배열 참조를 발생한다합니다

기술 자료 번역 기술 자료 번역
기술 자료: 165967 - 이 문서가 적용되는 제품 보기.
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
모두 확대 | 모두 축소

현상

스크립트 구성 요소에서 반환된 배열 요소를 참조하는 스크립트 엔진이 보고하는 시도할 때와:
"개체가 이 속성 또는 메서드를 지원하지 않습니다. ' <object>. <method>'"

원인

Microsoft에서 제공한 VBSCRIPT 액티브 스크립팅 엔진이 경우에만 SAFEARRAYs 변형 중 인덱싱 지원합니다. 동안 VBSCRIPT 경계 검사를 위해 없는 변형 형식의 배열 받아들일 수 있는 가능하며 다른 자동화 전달하는 개체에, 엔진은 이 때 배열 내용이 조작 허용하지 않습니다.

JSCRIPT 현재 스크립팅 엔진이 범위를 테스트 또는 변형 포함하여 모든 형식의 SAFEARRAYs 인덱싱에 대한 지원을 제공하지 않습니다. 그러나 JSCRIPT SAFEARRAYs 한 자동화 개체에서 다른 전달하는 중 수 있습니다.

해결 방법

응용 프로그램 및 VBSCRIPT 호스트 구성 요소가 제대로 작동하려면 자동화 개체 변형 SAFEARRAYs 만들어야 합니다. 비-VARIANT 데이터 VBSCRIPT 엔진에 반환할 SAFEARRAY VARIANT 요소를 패키지로 만들 합니다.

VBSCRIPT 작성된 스크립트 변수의 데이터 형식을 확인하려면 TypeName 함수를 사용해야 합니다. TypeName 함수는 문자열을 변형 배열이 전달될 때, 인용 부호 제외 Variant()를 반환합니다.

변수의 데이터 형식을 테스트할 수 있는 JSCRIPT 작성된 스크립트를 typeof 연산자를 사용해야 합니다. typeof 연산자의 "알 수 JSCRIPT에 의해 지원되지 않는 데이터 형식이 따옴표 제외 없음," 문자열을 반환합니다.

현재 상태

이것은 의도적으로 설계된 동작입니다.

추가 정보

한 단순 ATL (액티브 템플릿 라이브러리 (), VBSARRAY 것입니다 버전 2.1 구성 개체를 이 동작을 보여 줍니다. 이중 인터페이스를 세 가지 방법을 지원하는 Ivbsa 구성 요소를 구현하는: TestVariants, TestBstrs 및 TestPassArray. 첫 번째 BSTRs 중 SAFEARRAY 반환하여 문제를 보여 줍니다. 두 번째 VARIANT BSTRs 각 패키지 솔루션을 보여 줍니다. 세 번째 비 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;
   }
				
VBSARRAY.HTM, 변수의 데이터 형식을 확인하는 샘플 함께 포함된 테스트 페이지 JSCRIPT 코드에서 여기에 있습니다.
      <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. VBSARRAY.DLL REGSVR32.EXE 같은 도구를 사용하여 구성 요소를 등록하십시오.
  3. VBSARRAY.HTM 페이지 시작 Internet Explorer 및 부하 테스트.
  4. 다양한 단추를 클릭하고 결과 동작을 관찰하는 페이지의 지시를 따릅니다.
ATL 버전 2.1 Visual C++ 5.0 Visual Studio 97 환경 포함하여 사용하여 샘플 구성 요소를 만들었습니다. Visual Studio 97 있으면 VBSARRAY 프로젝트 직접 로드할 수 있습니다. 해당 VARIANT 및 해당 BSTR SAFEARRAY 생성된 방식을 볼 수 있는 편집기 에서 VBSA.CPP 관련 소스 파일을 열 수 있는 그렇지 경우. 구현 Cvbsa::TestVariants 및 Cvbsa::TestBstrs 소스 파일에서 검색하십시오.

다음 파일은 Microsoft 다운로드 센터에서 사용할 수 있습니다.
Vbsarray.exe
Microsoft 지원 파일을 다운로드하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
119591온라인 서비스로부터 Microsoft 지원 파일 구하는 방법
Microsoft는 이 파일에 대한 바이러스를 검색합니다. Microsoft는 파일을 게시한 날짜에 사용할 수 있었던 최신 바이러스 검색 소프트웨어가 사용됩니다. 해당 파일을 무단으로 변경할 수 없는 보안이 향상된 서버에 보관됩니다.

참조

플랫폼 SDK 자동화 참조

Microsoft Visual Basic 버전 언어 참조 스크립팅

속성

기술 자료: 165967 - 마지막 검토: 2014년 1월 28일 화요일 - 수정: 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-Bit Edition
  • Microsoft Active Server Pages 4.0
키워드:?
kbnosurvey kbarchive kbmt kbdownload kbfile kbprb kbsample KB165967 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

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