COM BSTR로 호출하여 받기

2010.10.20 15:58 개발언어/C++

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 하여 유지됨)

신고
  1. Favicon of http://plusblog.tistory.com BlogIcon 꼬마낙타비밀방문자
    2010.10.21 13:20 신고 edit/del reply

    이건 뭔가요? ㅋㅋ

    • Favicon of http://kwangho.tistory.com BlogIcon 엔돌슨비밀방문자
      2010.10.22 11:07 신고 edit/del

      ㅋㅋㅋ 메모좀했어요. 욕먹고 배우니 술술 잘되네요 ㅋㅋ
      간단한 내용인데 이해력이 딸려서 이렇게 삽질을 하니 삽자루를 던지고 싶네요 아~~ ㅠㅠ