본문 바로가기
개발언어/C++

COM BSTR로 호출하여 받기

by 엔돌슨 2010. 10. 20.
반응형

COM BSTR로 호출하여 받기



CString인 문자열을 BSTR 타입으로 넘기고 이를 BSTR타입으로 받는 방법이다.
<선언부>
CComPtr<IAcceptModule>   m_pAcceptDlg; 

<호출하기>

 CComBSTR bstrPntID = strPatientID.AllocSysString();

 HRESULT hResult = m_pAcceptDlg->ShowCallMsg(bstrPntID);

<참고> 프로젝트파일.tlb
IAcceptModule : IDispatch
{
    //
    // Raw methods provided by interface
    //

    virtual HRESULT __stdcall ShowAccept (
        IUnknown * pUnkn,
        VARIANT_BOOL * pbResult,
        long lHwnd ) = 0;
    virtual HRESULT __stdcall ShowCallMsg (
        BSTR bstrPntID ) = 0;
};




< 받기 >

 // USES_CONVERSION 매크로는 유니코드와 멀티바이트간 전환을
 // 쉽게 해주는 매드로들을 사용할 수 있게 해준다.
 USES_CONVERSION;

 CString strPntID = OLE2CT(bstrPntID);
 ::MessageBox(NULL, _T(strPntID), _T(""), 0);



< 주의사항 >
m_pAcceptDlg로 호출할때 같은 메모리상에 있지 않으면 여러개의 인터페이스가 생성되게 된다.
선언한 m_pAcceptDlg로 사용하며 별도의 선언시 다른 윈도우가 또 생성되므로 주의 한다. (AddRef .. 등으로 자동적으로 +1 , -1 하여 유지됨)