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

Makale çevirileri Makale çevirileri
Makale numarası: 141277 - Bu makalenin geçerli olduğu ürünleri görün.
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.
Hepsini aç | Hepsini kapa

Ö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.

Özellikler

Makale numarası: 141277 - Last Review: 1 Mart 2014 Cumartesi - Gözden geçirme: 3.1
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Foundation Class Library 4.2, Ne zaman ne ile kullanilir:
    • Microsoft Visual C++ 2.0 Professional Edition
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 2.2
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ .NET 2002 Standard Edition
    • Microsoft Visual C++ .NET 2003 Standard Edition
    • Microsoft Visual C++ 2005 Express Edition
Anahtar Kelimeler: 
kbnosurvey kbarchive kbmt kbarchitecture kbctrl kbhowto KB141277 KbMttr
Machine-translated Article
Ö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.
Makalenin İngilizcesi aşağıdaki gibidir:141277

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com