2010-04-18 1 views
0

IDL에 정의 된 구조가 있습니다.VARIANT에 캡슐화 된 IDL 사용자 정의 구조의 멤버 (예 : BSTR, SAFEARRAY, VARIANT)를 해제하는 방법은 무엇입니까?


{ 
    BSTR m_sFirst; 
    BSTR m_sSecond; 
    VARIANT m_vChildStruct; //This member encapsulate a sub structure 
    SAFEARRAY __RPC_FAR * m_saArray; 
}CustomINFO; 

내가 CoTaskMemAlloc를 사용하여 구조체를위한 메모리를 할당하고 다음과 같이 변형에서 캡슐화하고 있습니다 :



vV->vt = VT_RECORD; 
vV->pvRecord = pStruct; //Pointer of sturct 
vV->pRecInfo = pRI; //RecordInfo Interface 

는 구조체의 메모리 할당을 해제를 VariantClear를 호출 충분히인가이 구조는 다음과 같은 멤버를 가지고 및 그 회원? IRecordInfo 인터페이스도 출시됩니까?

아니면 수동으로 캡슐화 된 구조체를 가져 와서 각 멤버를 직접 할당 해제 한 다음 CoTaskMemFree를 사용하여 sturct를 할당 해제해야합니다.

감사

Picaro 드 Vosio

+0

당신은 이미 "주요"구조에 대한 IRecordInfo이 필요합니다. 왜 변형을 사용하는 대신 자식 구조를 그대로 선언하지 않는 것이 좋을까요? –

답변

1

VariantClear 구조체 자체를 (제대로 돌아갈 수 없습니다 그 이유는 해제하지 않습니다 가정 구조체의 회원들에 의해 개최 된 메모리를 해제하지만, IRecordInfo::Clear를 호출합니다 struct in a [out] VARIANT). IRecordInfo도 해제해야합니다.

("should"는 "그렇지 않으면 많은 기존 코드가 깨어 지거나 부러집니다")를 의미합니다. 여기

일부 더 많은 정보는 : http://vcfaq.mvps.org/com/4.htm

+0

답장을 보내 주셔서 감사합니다. –

관련 문제