ActiveX 객체에서 JScript로 문자열 배열을 올바르게 반환하는 방법

Win32 API를 사용하고 ActiveX 객체에서 JScript로 문자열 배열을 반환해야 하는 경우 몇 가지 문제에 직면할 수 있습니다. 이 문제는 문자열이 전송 중 ‘분실’되는 것처럼 보일 때 일반적으로 발생합니다. 이러한 환경에서 데이터 처리를 성공적으로 수행하려면 COM 객체, ActiveX 및 JScript 간의 관계를 이해하는 것이 중요합니다. 이 블로그 포스트에서는 이를 달성하기 위한 올바른 접근 방식을 안내합니다.

문제

COM 객체를 위해 IDL(인터페이스 정의 언어) 파일에서 문자열 배열을 반환하는 메서드를 포함하는 인터페이스를 정의했습니다. 구체적으로, 함수 서명은 다음과 같습니다:

HRESULT GetArrayOfStrings([out, retval] SAFEARRAY(BSTR) * rgBstrStringArray);

함수 자체는 정상적으로 작동하지만, JavaScript에서 문자열을 변수에 할당할 때 문제가 발생하여 문자열이 분실된 것처럼 보입니다. 데이터를 올바르게 전송하는 것이 중요합니다.

해결책

ActiveX 객체에서 JScript로 문자열 배열을 올바르게 전달하려면 아래의 세부 단계를 따르십시오:

1단계: SAFEARRAY를 VARIANT로 래핑하기

COM 객체와 JScript 간의 통신을 원활하게 하기 위해, 반환하기 전에 SAFEARRAYVARIANT로 래핑해야 합니다. 이를 통해 배열을 올바르게 처리하고 데이터 손실이 발생하지 않도록 할 수 있습니다. 아래는 이를 달성하기 위한 수정된 함수 코드입니다:

HRESULT GetArrayOfStrings(/*[out, retval]*/ VARIANT* pvarBstrStringArray)
{
   // 배열을 저장할 변수를 선언합니다.
   _variant_t ret;
   // 변수가 배열 형식으로 설정됩니다.
   ret.vt = VT_ARRAY | VT_VARIANT;
   ret.parray = rgBstrStringArray; // SAFEARRAY 할당.
   *pvarBstrStringArray = ret.Detach(); // 반환을 위해 분리합니다.
   return S_OK; // 성공 반환.
}

2단계: JScript에서 VBArray 사용하기

데이터가 VARIANT로 래핑되고 ActiveX에서 성공적으로 반환된 후, JScript 코드에서 VBArray 객체를 사용하여 데이터를 올바르게 언팩할 수 있습니다. 필요한 코드 한 줄은 다음과 같습니다:

var jsFriendlyStrings = new VBArray(axOb.GetArrayOfStrings()).toArray();

이 한 줄은 반환된 VARIANT를 JavaScript 친화적인 문자열 배열로 효과적으로 변환하여 데이터를 필요에 맞게 처리할 수 있습니다.

결론

ActiveX 객체에서 JScript로 문자열 배열을 전송하는 처리는 COM 객체와 JavaScript 간의 상호작용을 조작하는 방법을 이해하는 데 달려 있습니다. SAFEARRAYVARIANT로 래핑하고 VBArray를 사용하여 언팩함으로써 모든 데이터가 손실 없이 올바르게 전달되도록 보장할 수 있습니다.

이제 관리 스크립트에서 문자열 배열을 성공적으로 반환하고 활용할 수 있는 올바른 접근 방식을 갖추었을 것입니다. 행복한 코딩 되세요!