'Casting'에 해당되는 글 1건

  1. 2009.04.24 [COM] [예제] COM Aggregation 에서의 casting

[COM] [예제] COM Aggregation 에서의 casting

CS/COM 2009. 4. 24. 07:00
COM공부중 Aggregation 공부하던중 왠지 casting 부분에서 급 혼란. -_-; Casting을 하게 되면, Casting된 Object를 Base class부터 생각하고,  이후 그 Object의 Derived class를 생각하자!!! -_-;;;
01class IUnknown
02{
03public:
04    virtual void QueryInterface() = 0;
05    virtual void AddRef() = 0;
06    virtual void Release() = 0;
07};
08 
09class IDummy : public IUnknown
10{
11public:
12    virtual void Fx() = 0;
13};
14 
15class INondelegatingUnknown
16{
17public:
18    virtual void NondelegatingQueryInterface() = 0;
19    virtual void NondelegatingAddRef() = 0;
20    virtual void NondelegatingRelease() = 0;
21};
22 
23class C : public IDummy,
24          public INondelegatingUnknown
25{
26public:
27    virtual void QueryInterface() { std::cout << "QueryInterface" << std::endl; }
28    virtual void AddRef() { std::cout << "AddRef" << std::endl; }
29    virtual void Release() { std::cout << "Release" << std::endl; }
30 
31    virtual void NondelegatingQueryInterface()
32                 { std::cout << "NondelegatingQueryInterface" << std::endl; }
33    virtual void NondelegatingAddRef()
34                 { std::cout << "NondelegatingAddRef" << std::endl; }
35    virtual void NondelegatingRelease()
36                 { std::cout << "NondelegatingRelease" << std::endl; }
37 
38    virtual void Fx() { std::cout << "Fx()" <<  std::endl; }
39 
40    C();
41 
42public:
43    IUnknown* m_pI;
44    void Go();
45};
46 
47C::C()
48{
49    m_pI = reinterpret_cast<IUnknown*>
50                   ( static_cast<INondelegatingUnknown*>(this) );
51}
52 
53void C::Go()
54{
55    m_pI->QueryInterface();
56}
57 
58int _tmain(void)
59{
60    C c;
61 
62    c.Go();
63 
64    return 0;
65}
Inside COM Aggregation 예제
: