다음과 같은 서명을 사용하여 C++로 작성된 COM 개체가 있습니다. variant에 BSTR (VT_BYREF | VT_BSTR이 아니라 VT_BSTR 만 포함)이 있다고 가정합니다.입력 BSTR VARIANT에 대해 VariantChangeType을 호출 할 수 있습니까?
HRESULT myfunc(/*[in]*/ VARIANT param)
유형을 다른 것으로 변경하고 싶습니다. VariantChangeType의 첫 번째 매개 변수가 두 번째 매개 변수와 동일하면 "변형이 제자리에서 변환됩니다."
그래서 변환 할 수 있습니까?
HRESULT myfunc(/*[in]*/ VARIANT param)
{
VariantChangeType(¶m, param, 0, VT_I4);
}
아니면 두 번째 변형으로 복사해야합니까?
HRESULT myfunc(/*[in]*/ VARIANT param)
{
VARIANT temp;
VariantInit(&temp);
VariantChangeType(&temp, param, 0, VT_I4);
}
나의 이해는 전자가 클라이언트에 의해 소유되고 클라이언트에 의해 해제해야 BSTR을 무료 것이기 때문에 후자가 필요하다는 것입니다.
아니요, VariantChangeType()은 결과를 다른 변형으로 저장합니다. 첫 번째 인수로 전달한 것. 그래서 BSTR을 공개 할 이유가 전혀 없습니다. –
@HansPassant VariantChangeType()에 대한 첫 번째 매개 변수는 두 번째 매개 변수와 동일 할 수 있습니다. 즉, variant가 제자리에서 변환 될 것임을 의미합니다. 그래서, 아마도 더 나은 진술, 내가 자리를 변환하거나 두 번째 변형으로 변환해야합니까? 내가 명확하게 질문을 업데이 트했습니다. – jveazey
FWIW, 문제를 설명하기위한 요지를 만들었습니다. https://gist.github.com/Neuroboy23/efb3d45783faf03bd87ee2a69519ce84 –