다음을 통해 공유


VariantClear 함수(oleauto.h)

변형을 지웁니다.

구문

HRESULT VariantClear(
  [in, out] VARIANTARG *pvarg
);

매개 변수

[in, out] pvarg

지울 변형입니다.

반환 값

이 함수는 이러한 값 중 하나를 반환할 수 있습니다.

반환 코드 Description
S_OK
성공.
DISP_E_ARRAYISLOCKED
변형에는 잠긴 배열이 포함되어 있습니다.
DISP_E_BADVARTYPE
변형 형식이 유효한 형식이 아닙니다.
E_INVALIDARG
인수 중 하나가 잘못되었습니다.

설명

이 함수를 사용하여 VARIANTARG를 포함하는 메모리가 해제되기 전에 VARIANTARG(또는 VARIANT) 형식의 변수를 지웁니다(지역 변수가 scope 꺼지는 경우).

함수는 vt 필드를 VT_EMPTY 설정하여 VARIANTARG를 지웁니다. VARIANTARG의 현재 콘텐츠가 먼저 릴리스됩니다. vtfield가 VT_BSTR 경우 문자열이 해제됩니다. vtfield가 VT_DISPATCH 경우 개체가 해제됩니다. vt 필드에 VT_ARRAY 비트 집합이 있으면 배열이 해제됩니다.

지울 변형이 참조로 전달되는 COM 개체인 경우 pvargparameter의 vtfield는 | VT_DISPATCH. VT_BYREF 또는 VT_UNKNOWN | VT_BYREF. 이 경우 VariantClear 는 개체를 해제하지 않습니다. 지워지는 변형은 개체에 대한 참조에 대한 포인터이므로 VariantClear 는 개체를 해제해야 하는지 확인할 방법이 없습니다. 따라서 호출자는 개체를 적절하게 해제해야 합니다.

경우에 따라 VariantClear를 호출하지 않고 코드에서 변형을 지우는 것이 좋습니다. 예를 들어 이 함수를 호출하지 않고 VT_I4 변형의 형식을 다른 형식으로 변경할 수 있습니다. BSTR의 Safearrays에는 VariantClear가 아닌 각 요소에 대해 SysFreeString이 호출됩니다. 그러나 VT_type 수신되었지만 처리할 수 없는 경우 VariantClear 를 호출해야 합니다. 또한 variant의 Safearray에는 각 멤버에 대해 VariantClear 가 호출됩니다. 이러한 경우 VariantClear 를 사용하면 Automation에서 나중에 새 변형 형식을 추가하는 경우 코드가 계속 작동합니다.

초기화되지 않은 변형에는 VariantClear 를 사용하지 마세요. VariantInit 를 사용하여 새 VARIANTARG 또는 VARIANT를 초기화합니다.

미해결 참조가 있는 배열을 포함하는 변형은 지울 수 없습니다. 이렇게 하면 DISP_E_ARRAYISLOCKED 포함하는 HRESULT가 반환됩니다.

예제

다음 예제에서는 변형 배열을 지우는 방법을 보여 줍니다. 여기서 celt 는 배열의 요소 수입니다.

for(int i = 0; i < celt; ++i)
   VariantClear(&rgvar[i]);

요구 사항

요구 사항
대상 플랫폼 Windows
헤더 oleauto.h
라이브러리 OleAut32.lib
DLL OleAut32.dll

추가 정보

변형 조작 함수