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

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.

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

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 141277 – Letzte Überarbeitung: 03/01/2014 07:17:08 – Revision: 3.1

  • Microsoft Foundation Class Library 4.2
  • kbnosurvey kbarchive kbmt kbarchitecture kbctrl kbhowto KB141277 KbMtde
Feedback