JavaScript가 배열을 전달하기 위해 COM을 호출하면 COM 인터페이스는 배열과 같은 VARIANT 유형 개체를 수신합니다. 이 개체의 vt 유형은 VT_DISPATCH이므로 해당 값은 IDispatch 유형 포인터를 나타냅니다.
IDispatch 유형의 포인터는 배열 객체가 실제로 JavaScript의 내장 배열 객체임을 나타냅니다. JavaScript 측에서는 길이 속성을 통해 배열의 크기를 얻을 수 있습니다. 함수와 Invoke 함수의 길이를 지정하여 배열의 내용을 동적으로 변경할 수 있습니다.
인용된 내용은 다음과 같습니다. // 배열의 길이를 구한다 } |
이때 nLength는 배열의 길이를 가져옵니다.
JavaScript의 배열은 객체이며, 배열의 내용은 동적으로 생성되는 객체의 속성입니다. 이러한 속성의 쿼리 메서드는 길이의 쿼리 메서드와 다소 유사합니다. 가장 큰 차이점은 이름의 차이입니다. 배열에 있는 요소 객체의 속성 이름은 동적으로 생성됩니다. 즉, 첨자를 통해 얻을 수 있습니다. 따라서 여기서 속성 이름은 다음과 같이 첨자를 통해서도 얻을 수 있습니다. 다음과 같습니다:
인용된 내용은 다음과 같습니다. for ( int i = 0 ; i < nLength; ++ i) |
따라서 이 두 가지 특성 메서드를 호출하면 모든 JavaScript 배열 개체를 COM 인터페이스에서 쉽게 사용할 수 있습니다.
이것의 이점은 무엇입니까? 많은 온라인 리소스를 살펴보면 대부분 SAFEARRAY를 사용하여 구조를 처리하고 이를 COM 인터페이스에 전달하는 것으로 나타났습니다. 그러나 SAFEARRAY는 MIDL에서 지원되지 않으며 JavaScript 개체 자체도 지원되지 않습니다. 이 콘텐츠의 경우 SAFEARRAY 모드에서 작동하려면 VBScript와 JavaScript 간 전환이 필요하므로 프로그램 작성이 어렵고 유지 관리 담당자에게 혼란이 발생합니다.
JavaScript를 직접 사용하여 배열을 전달하고 어떤 방식으로든 배열을 통합할 필요가 없습니다. SAFEARRAY 메서드를 통해 구조를 통합할 필요가 없습니다. 동시에 JavaScript의 모든 객체(요소)에는 고유한 유형 정보가 있으므로 JavaScript의 배열은 C 구조에 대한 최상의 대안(전송 방법)입니다.