Visual C++ kullanarak MFC uygulamadaki bir arabirim geçersiz kılmak için

ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.

141277
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Not Microsoft Visual C++ NET (2002), .NET Framework ve yönetilmeyen yerel Windows tarafından sağlanan her iki yönetilen kod modeli desteklenen kod modeli. Bu makaledeki bilgiler için yönetilmeyen Visual C++ geçerli yalnızca kod.

Not Microsoft Visual C++ 2005, .NET Framework ve yönetilmeyen yerel Windows tarafından sağlanan her iki yönetilen kod modeli desteklenen kod modeli.
Özet
MFC uygulamada, bir sınıfta varolan arabirimleri geçersiz yaný sýra ek arabirimler sağlar. Arabirim geçersiz kılma bu durumda bir arabirim değiştirme ile eşanlamlıdır. Bu makaledeki örnek; böylece, yeni bir arabirimi uygulama tarafından temsilci olarak atanabilir, özgün arabirimi uygulaması koruyarak, bir sınıf içinde bir arabirim geçersiz kılmak verilmektedir.

Bu özel bir durum olduğundan bu makalede ıdispatch uygulaması, geçersiz kılma ile ilgilenme değil. MFC, ıdispatch geçersiz kılma konusunda daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
140616MFC ıdispatch uygulaması değiştirme
Daha fazla bilgi
Aşağıdaki adımlar, IOleObject kılar uygulama için varsayılan bir OLE Denetim Sihirbazı tarafından oluşturulan denetim.

  1. Denetime IOleObject uygulama bildirimi eklemek için <a0></a0>, üstbilgi dosyasına COleControl türetilmiş sınıf için aşağıdaki kodu ekleyin:
          // Interface Maps      protected:           // IOleObject           BEGIN_INTERFACE_PART(MyOleObject, IOleObject)               INIT_INTERFACE_PART(CIOleOverCtrl, MyOleObject)               STDMETHOD(SetClientSite)(LPOLECLIENTSITE);               STDMETHOD(GetClientSite)(LPOLECLIENTSITE*);               STDMETHOD(SetHostNames)(LPCOLESTR, LPCOLESTR);               STDMETHOD(Close)(DWORD);               STDMETHOD(SetMoniker)(DWORD, LPMONIKER);               STDMETHOD(GetMoniker)(DWORD, DWORD, LPMONIKER*);               STDMETHOD(InitFromData)(LPDATAOBJECT, BOOL, DWORD);               STDMETHOD(GetClipboardData)(DWORD, LPDATAOBJECT*);               STDMETHOD(DoVerb)(LONG, LPMSG, LPOLECLIENTSITE, LONG, HWND,                       LPCRECT);               STDMETHOD(EnumVerbs)(IEnumOLEVERB**);               STDMETHOD(Update)();               STDMETHOD(IsUpToDate)();               STDMETHOD(GetUserClassID)(CLSID*);               STDMETHOD(GetUserType)(DWORD, LPOLESTR*);               STDMETHOD(SetExtent)(DWORD, LPSIZEL);               STDMETHOD(GetExtent)(DWORD, LPSIZEL);               STDMETHOD(Advise)(LPADVISESINK, LPDWORD);               STDMETHOD(Unadvise)(DWORD);               STDMETHOD(EnumAdvise)(LPENUMSTATDATA*);               STDMETHOD(GetMiscStatus)(DWORD, LPDWORD);               STDMETHOD(SetColorScheme)(LPLOGPALETTE);           END_INTERFACE_PART(MyOleObject)      DECLARE_INTERFACE_MAP();						
    bu denetimi sınıfınızın XMyOleObject iç içe geçmiş bir sınıf ekler. Bu makrolar, ıunknown yöntemleri de uygulamalıdır; böylece ıunknown arabirim yöntemleri de dahil olmak üzere arabirim yöntemleri bildirmek unutmayın.
  2. Denetim için <a1>Uygulama</a1> dosyasına bir INTERFACE_PART makro ekleyerek denetim arabirimi eşlemesine IOleObject arabirimi ekleyin:
          BEGIN_INTERFACE_MAP(CIOleOverCtrl, COleControl)         INTERFACE_PART(CIOleOverCtrl, IID_IOleObject, MyOleObject)      END_INTERFACE_MAP()						
    Değiştir CIOleOverCtrl IOleObject destekleyen iç içe geçmiş sınıfı için seçtiğiniz adı ile denetim ve MyOleObject ada sahip.
  3. Size bildirilen arabirim yöntemleri uygulayın. Denetim için <a1>Uygulama</a1> dosyasına aşağıdaki kodu ekleyin:
          STDMETHODIMP_(ULONG) CIOleOverCtrl::XMyOleObject::AddRef()      {          METHOD_MANAGE_STATE(CIOleOverCtrl, MyOleObject)          ASSERT_VALID(pThis);          return pThis->m_xOleObject.AddRef();      }      STDMETHODIMP_(ULONG) CIOleOverCtrl::XMyOleObject::Release()      {          METHOD_MANAGE_STATE(CIOleOverCtrl, MyOleObject)          ASSERT_VALID(pThis);          return pThis->m_xOleObject.Release ();      }      STDMETHODIMP CIOleOverCtrl::XMyOleObject::QueryInterface(          REFIID iid, LPVOID far* ppvObj)      {          METHOD_MANAGE_STATE(CIOleOverCtrl, MyOleObject)          ASSERT_VALID(pThis);          return pThis->m_xOleObject.QueryInterface ( iid,  ppvObj);      }      STDMETHODIMP      CIOleOverCtrl::XMyOleObject::SetClientSite(LPOLECLIENTSITE      pClientSite)      {          METHOD_MANAGE_STATE(CIOleOverCtrl, MyOleObject)             ASSERT_VALID(pThis);          return pThis->m_xOleObject.SetClientSite ( pClientSite );      }      ...
Kalan yöntemleri CIOleOverCtrl denetiminin adını, XMyOleObject IOleObject destekleyen bir iç içe geçmiş sınıfın adını ve desteklenen ve ekleme m_x olan arabirimden ı kaldırarak m_xMyOleObject hesaplanan desen izleyin.

Bu yöntem yalnızca özgün IOleObject üzerinde çaðrý geçirmek Not uygulaması. Ancak bu zorunlu değildir; ve işlevler eklemek için özgün bir uygulama veya temsilci değil, tüm temsilci.
Referanslar
Teknik notları # 38 ve # 39.

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 141277 - Son İnceleme: 03/01/2014 07:17:08 - Düzeltme: 3.1

  • Microsoft Foundation Class Library 4.2
  • kbnosurvey kbarchive kbmt kbarchitecture kbctrl kbhowto KB141277 KbMttr
Geri bildirim