COM 에서 JavaScript 배열 크기 코드 가 져 오기
2408 단어 JavaScript배열
//
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 에서 구조 체 의 가장 좋 은 대체 방식(전달 방식)을 가지 고 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.