Gewusst wie: eine Schnittstelle in einer MFC-Anwendung mithilfe von Visual C++ überschreiben

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 141277 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Hinweis: Microsoft Visual C++ NET (2002) unterstützt beide das verwaltete Codemodell, die von .NET Framework und der nicht verwalteten systemeigenen Windows bereitgestellt wird Codemodell. Die Informationen in diesem Artikel beziehen sich auf nicht verwalteten Visual C++ nur code.

Hinweis: Microsoft Visual C++ 2005 unterstützt beide das verwaltete Codemodell, die von .NET Framework und der nicht verwalteten systemeigenen Windows bereitgestellt wird Codemodell.
Alles erweitern | Alles schließen

Zusammenfassung

In einer MFC-Anwendung können Sie Überschreiben von vorhandene Schnittstellen in einer Klasse sowie zusätzliche Schnittstellen bereitstellen. Überschreiben eine Schnittstelle ist in diesem Fall gleichbedeutend mit Ersetzen einer Schnittstelle. Das Beispiel in diesem Artikel veranschaulicht das Überschreiben einer Schnittstelle in einer Klasse Beibehaltung der ursprünglichen Schnittstellenimplementierung so, dass Sie durch die die neue Implementierung der Schnittstelle zugewiesen werden kann.

Dieser Artikel ist nicht mit dem Überschreiben der IDispatch-Implementierung behandelt, da dies ein Sonderfall ist. Weitere Informationen zum Überschreiben von IDispatch in MFC finden Sie im folgenden Artikel der Microsoft Knowledge Base:
140616MFC-IDispatch-Implementierung ersetzen

Weitere Informationen

Die folgenden Schritte überschreibt die IOleObject Implementierung für einen Standard-OLE-Steuerelement vom Steuerelement-Assistenten generierte.

  1. Fügen Sie die Deklaration der IOleObject Implementierung des Steuerelements hinzu, den folgenden Code zur Headerdatei der COleControl abgeleiteten Klasse:
          // 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();
    						
    diese Fügt eine geschachtelte Klasse XMyOleObject zu Ihrer Klasse-Steuerelement hinzu. Beachten Sie, dass diese Makros Schnittstellenmethoden einschließlich die IUnknown-Schnittstellenmethoden, so dass Sie die IUnknown-Methoden implementieren müssen deklarieren.
  2. Um die Schnittstellenzuordnung für das Steuerelement die IOleObject Schnittstelle hinzuzufügen, indem die Implementierungsdatei für das Steuerelement ein Makro INTERFACE_PART hinzugefügt:
          BEGIN_INTERFACE_MAP(CIOleOverCtrl, COleControl)
             INTERFACE_PART(CIOleOverCtrl, IID_IOleObject, MyOleObject)
          END_INTERFACE_MAP()
    						
    CIOleOverCtrl mit dem Namen der Steuerelements und MyOleObject und den Sie für die geschachtelte Klasse gewählt haben, die IOleObject unterstützt Namen ersetzen.
  3. Implementieren Sie die Schnittstellenmethoden, die Sie deklariert. Fügen Sie den folgenden Code hinzu die Implementierungsdatei für das Steuerelement:
          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 );
          }
          ...
Die restlichen Methoden folgen demselben Muster wobei CIOleOverCtrl den Namen des Steuerelements, XMyOleObject ist der Name der geschachtelten Klasse, die IOleObject unterstützt und M_xMyOleObject wird berechnet, die aus der Schnittstelle unterstützt und Hinzufügen von M_x wird entfernt.

Beachten Sie, dass diese Methoden einfach auf die ursprünglichen IOleObject übergeben Implementierung. Jedoch Dies ist nicht erforderlich; Sie können Funktionen hinzufügen und Delegieren Sie an der ursprünglichen Implementierung oder nicht Delegaten überhaupt.

Informationsquellen

Technische Hinweise # 38 und Nr. 39.

Eigenschaften

Artikel-ID: 141277 - Geändert am: Samstag, 1. März 2014 - Version: 3.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Foundation Class Library 4.2, wenn verwendet mit:
    • 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
Keywords: 
kbnosurvey kbarchive kbmt kbarchitecture kbctrl kbhowto KB141277 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 141277
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

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