IResult프로퍼티 삭제후 IResult 라는 인터페이스 추가시.
idl - 2군데 추가
헤더 - 2군데 추가
1. idl 수정
- 기존의 인터페이스 부분을 복사해서 붙여넣고 interface 이름을 IResult로 변경
- uuid 값 변경.
[
object,
uuid(596E5FFD-EFE0-4394-BA1F-FB24E97DB069),
oleautomation(); // 추가
helpstring("ICCalCu Interface"),
pointer_default(unique)
]
interface IResult : IUnknown
{
};
idl 파일 밑 부분에coclass Calcu 부분에 추가한다.
coclass CCalCu
{
[default] interface ICCalCu;interface IResult; // 추가
};
2. 실제 소스 코드 수정
CCalcu 소스파일( CalCu.h )
class 선언부분에 추가로 상속시킨다.
class ATL_NO_VTABLE CCCalCu :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CCCalCu, &CLSID_CCalCu>,
public ICCalCu,public IResult
2. BeginMap 에 추가.
BEGIN_COM_MAP(CCCalCu)
COM_INTERFACE_ENTRY(ICCalCu)COM_INTERFACE_ENTRY(IResult)
END_COM_MAP()
3. 이제 기존의 IResult 프로퍼티는 삭제
[propget, helpstring("property Result")] HRESULT Result([out, retval] long *pVal); // 이놈을 삭제
4. 소스파일의 프로퍼티 구현부를 삭제한다.
5. IResult 인터페이스에 프로퍼티를 추가한다.
============= 클라이언트에서 바뀐 부분. =================
맴버변수 pIResult를 추가하고.( IResultPtr pIResult; )
OnInitDialog() 초기화 부분에서.......
pICalCu = ICCalCuPtr(__uuidof(CCalCu));
pIResult = pICalCu;
이렇게 또는
HRESULT hr;
hr = pICalCu.CreateInstance(__uuidof(CCalCu));if( FAILED(hr) )
{
MessageBox("인스턴스 생성샐패");
ExitProcess(0);
}pIResult = pICalCu;
이렇게 해서 쓰면 됨.