개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.04.13 14:18

COMPersistHelper::SaveToStream 관련 질문

목록
  • 메모리최적화전문가 1일 전 2025.04.13 14:18
  • 22
    1
저는 OLE COM 컴포넌트를 개발 중에 있습니다.
COMPersistHelper::SaveToStream을 사용하여 컴포넌트의 상태를 저장하려 하지만,
이 메서드의 기능과 사용법을 잘 이해하지 못하여 혼란을 느끼고 있습니다.
다음과 같은 코드를 사용하여 SaveToStream을 호출하려고 합니다.

cpp

HRESULT CMyComponent::SaveToStream(IStream* pStream)

{

    HRESULT hr = S_OK;



    // SaveToStream 메서드 호출

    hr = m_pPersistHelper->SaveToStream(pStream);



    return hr;

}



여기서 m_pPersistHelper는 COMPersistHelper를 가리키는 포인터입니다.
하지만 이 메서드를 호출하여도 컴포넌트의 상태가 저장되지 않습니다.
이 메서드의 기능과 사용법을 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  1일 전



    COMPersistHelper::SaveToStream은 OLE 컴포넌트의 상태를 저장하는 메서드입니다. 이 메서드를 호출하여 컴포넌트의 상태를 저장하려면, 컴포넌트가 OLE의 Persist 인터페이스를 구현해야 합니다.

    Persist 인터페이스는 컴포넌트의 상태를 저장하고, 저장된 상태를 불러올 수 있는 메서드를 제공합니다. 컴포넌트가 Persist 인터페이스를 구현하지 않았다면, SaveToStream 메서드를 호출하여도 컴포넌트의 상태가 저장되지 않을 것입니다.

    Persist 인터페이스를 구현하는 컴포넌트의 예제는 다음과 같습니다.

    #hostingforum.kr
    cpp
    
    class CMyComponent : public IPersist
    
    {
    
    public:
    
        HRESULT SaveToStream(IStream* pStream)
    
        {
    
            // 컴포넌트의 상태를 저장하는 코드를 구현합니다.
    
            // 예를 들어, 컴포넌트의 속성을 저장하는 코드를 구현할 수 있습니다.
    
            // ...
    
            return S_OK;
    
        }
    
    
    
        HRESULT Load(IStream* pStream)
    
        {
    
            // 저장된 컴포넌트의 상태를 불러오는 코드를 구현합니다.
    
            // 예를 들어, 컴포넌트의 속성을 불러오는 코드를 구현할 수 있습니다.
    
            // ...
    
            return S_OK;
    
        }
    
    };
    
    


    이 컴포넌트는 IPersist 인터페이스를 구현하여 SaveToStream 메서드를 구현했습니다. 이 메서드는 컴포넌트의 상태를 저장하는 코드를 구현해야 합니다.

    SaveToStream 메서드를 호출하여 컴포넌트의 상태를 저장하려면, 컴포넌트의 인스턴스를 생성하고, SaveToStream 메서드를 호출하는 코드를 구현해야 합니다.

    #hostingforum.kr
    cpp
    
    int main()
    
    {
    
        CMyComponent component;
    
        IStream* pStream;
    
        HRESULT hr = S_OK;
    
    
    
        // 컴포넌트의 상태를 저장하는 코드를 구현합니다.
    
        hr = component.SaveToStream(&pStream);
    
        if (SUCCEEDED(hr))
    
        {
    
            // 저장된 컴포넌트의 상태를 불러오는 코드를 구현합니다.
    
            hr = component.Load(pStream);
    
            if (SUCCEEDED(hr))
    
            {
    
                // 컴포넌트의 상태가 저장되어 있습니다.
    
            }
    
        }
    
    
    
        return 0;
    
    }
    
    


    이 코드는 컴포넌트의 상태를 저장하고, 저장된 상태를 불러오는 코드를 구현했습니다. 컴포넌트의 상태가 저장되어 있으면, 컴포넌트의 상태가 저장된 상태로 불러올 수 있습니다.

    2025-04-13 14:19

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 11,436건 / 3 페이지

검색

게시물 검색