COM 에서 JavaScript 배열 크기 코드 가 져 오기

2408 단어 JavaScript배열
IDispatch 형식의 지침 은 이 배열 의 대상 이 실제 자바 script 의 내장 배열 대상 임 을 나타 낸다.자바 script 단 에서 우 리 는 length 속성 을 통 해 배열 의 크기 를 얻 을 수 있다.그러면 여기 서 GetIDsOfnames 함수 와 Invoke 함 수 를 통 해 배열 의 길 이 를 얻 을 수 있 고 동적 변수 배열 내용 을 얻 을 수 있다
 
//
BSTR bstrLength = L"length";
DISPID dispid;
hr = lpDispatch->GetIDsOfNames(IID_NULL, &bstrLength, 1,
LOCALE_USER_DEFAULT, &dispid);
if ( SUCCEEDED(hr) )
{
CComVariant varResult;
hr = lpDispatch->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, &noArgs, &varResult, NULL, NULL);

if ( varResult.vt == VT_I4)
{
nLength = varResult.intVal;
}
}
이때 nLength 가 얻 은 것 은 바로 배열 의 길이 이다.JavaScript 의 배열 에 있 을 때 한 대상,배열 내용 은 이 대상 의 속성 이 고 동적 으로 만 들 어 졌 습 니 다.이러한 속성의 조회 방식 은 length 의 조회 방식 과 유사 하 며 GetIDsOfnames 와 Invoke 함수 이기 도 합 니 다.주요 한 차 이 는 이름 의 차이 에 있 습 니 다.배열 에 있 는 요소 대상 의 속성 입 니 다.그 이름 은 동적 으로 만 들 어 졌 습 니 다.즉,아래 표 시 를 통 해 얻 을 수 있 기 때문에 여기 서 아래 표 시 를 통 해 이 속성 이름 을 얻 을 수 있 습 니 다.구체 적 으로 다음 과 같 습 니 다
 
for ( int i=0; i<nLength; ++i)
{
CComVariant vaIndex(i, VT_I4);
vaIndex.ChangeType(VT_BSTR);
DISPID dispid;
hr = lpDispatch->GetIDsOfNames(IID_NULL, &vaIndex.bstrVal,1,
LOCALE_USER_DEFAULT, &dispid);
if ( FAILED(hr) )
{
continue;
}
CComVariant varResult;
hr = lpDispatch->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, &noArgs, &varResult, NULL, NULL);
VARTYPE vt = varResult.vt;
if (vt == VT_DISPATCH )
{
InvokeArray( varResult );
continue;
}
hr = varResult.ChangeType(VT_BSTR);
CComBSTR bstrVal = varResult.bstrVal;
}
따라서 이 두 가지 속성 방식 의 호출 을 통 해 COM 인터페이스 에서 모든 자바 스 크 립 트 배열 대상 을 편리 하 게 할 수 있 습 니 다.이것 은 무슨 좋 은 점 이 있 습 니까?많은 인터넷 자원 을 조회 할 때 대부분 SAFEARRAY 방식 으로 구조 체 를 처리 하여 COM 인터페이스 에 들 어 가 는 것 을 발 견 했 습 니 다.그러나 SAFEARRAY 는 MIDL 에서 지원 되 지 않 았 고 JavaScript 대상 자체 도 이 내용 을 지원 하지 않 았 습 니 다.SAFEARRAY 방식 으로 조작 하려 면 VBScript 와 JavaScript 두 가지 언어 를 전환 해 야 합 니 다.이것 은 프로그램 작성 의 어려움 과 관리자 들 의 곤 혹 스 러 움 을 초래 할 수 있다.자바 스 크 립 트 방식 으로 배열 에 직접 들 어가 배열 을 임 의 방식 으로 통합 하면 SAFEARRAY 방식 으로 구조 체 통합 이 필요 없다.또한,자바 스 크 립 트 의 모든 대상(요소)은 자체 의 유형 정 보 를 가지 고 있 기 때문에 자바 스 크 립 트 의 배열 시 C 에서 구조 체 의 가장 좋 은 대체 방식(전달 방식)을 가지 고 있 습 니 다.

좋은 웹페이지 즐겨찾기