MFC-ActiveX-Steuerelemente: Serialisieren

In diesem Artikel wird erläutert, wie ein ActiveX-Steuerelement serialisiert.Die Serialisierung ist der Prozess von Lesen oder Schreiben in einen permanenten Speichermedium des Speichers, z. B. eine Datenträgerdatei.Die Microsoft Foundation Class (MFC) bietet integrierte Unterstützung für die Serialisierung der Klasse CObject.COleControl erweitert diese Unterstützung durch die Verwendung von ActiveX-Steuerelementen zu einem Mechanismus für den Datenaustausch Eigenschaft.

Serialisierung für ActiveX-Steuerelemente wird implementiert, indem COleControl::DoPropExchange überschreibt.Diese Funktion namens beim Laden und Speichern des Steuerelementobjekts, speichert alle Eigenschaften, die mit einer Membervariablen oder eine Membervariable mit Änderungsbenachrichtigung implementiert werden.

In den folgenden Themen werden die Kernfragen, die zum Serialisieren eines ActiveX-Steuerelements verknüpft sind:

  • DoPropExchange implementiert, arbeiten Sie, um das Steuerelementobjekt zu serialisierende

  • Anpassen des Serialisierungs-Prozess

  • Implementieren Versions-Unterstützung

Die DoPropExchange-Funktion implementieren

Wenn Sie mit dem ActiveX-Steuerelement-Assistenten können Sie das Steuerelementprojekt zu generieren, sind einige Standardwert Handlerfunktionen automatisch der Steuerelementklasse einschließlich der Standardimplementierung von COleControl::DoPropExchange hinzugefügt.Das folgende Beispiel zeigt den Code, der für Klassen hinzugefügt wird, die mit dem ActiveX-Steuerelement-Assistenten erstellt werden:

void CMyAxUICtrl::DoPropExchange(CPropExchange* pPX)
{
   ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
   COleControl::DoPropExchange(pPX);

   // TODO: Call PX_ functions for each persistent custom property.
}

Wenn Sie eine Eigenschaft permanent ausführen möchten, ändern Sie DoPropExchange, indem Sie einen Aufruf der Funktion zum Datenaustausch Eigenschaft hinzufügen.Im folgenden Beispiel wird die Serialisierung einer benutzerdefinierten booleschen CircleShape-Eigenschaft, in der die CircleShape-Eigenschaft den Standardwert TRUE aufweist:

void CMyAxSerCtrl::DoPropExchange(CPropExchange* pPX)
{
    ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    COleControl::DoPropExchange(pPX);


...


   PX_Bool(pPX, _T("CircleShape"), m_bCircleShape, TRUE);
}

In der folgenden Tabelle werden die möglichen Eigenschaft Datenaustausch Funktionen aufgeführt, die Sie verwenden können, um die Eigenschaften des Steuerelements zu serialisieren:

Datenaustausch Eigenschaft von Funktionen

Zweck

PX_Blob ()

Serialisiert eine Dateneigenschaft Typ BLOB (Binary Large Object).

PX_Bool ()

Serialisiert eine Eigenschaft des Typs Booleschen Wert.

PX_Color ()

Serialisiert einen Typ farbeigenschaft.

PX_Currency ()

Serialisiert eine Eigenschaft vom Typ CY (Währung).

PX_Double ()

Serialisiert ein Typ double-Eigenschaft.

PX_Font ()

Serialisiert eine Schriftarttypen Eigenschaft.

PX_Float ()

Serialisiert ein Typ float-Eigenschaft.

PX_IUnknown ()

Serialisiert eine Eigenschaft des Typs LPUNKNOWN.

PX_Long ()

Serialisiert ein Typ long-Eigenschaft.

PX_Picture ()

Serialisiert einen Typ Bild.

PX_Short ()

Serialisiert ein Typ short-Eigenschaft.

PX_String ()

Serialisiert ein Typ CString-Eigenschaft.

PX_ULong ()

Serialisiert ein Typ ULONG-Eigenschaft.

PX_UShort ()

Serialisiert ein Typ USHORT-Eigenschaft.

Weitere Informationen zu dieser Eigenschaft finden Sie Dauerhaftigkeit von OLE-Steuerelementen Datenaustausch Funktionen in der MFC-Referenz.

Das Standardverhalten von DoPropExchange anpassen

Die Standardimplementierung von DoPropertyExchange (wie im vorherigen Abschnitt beschrieben wird) COleControl der Basisklasse aufgerufen.Dieses serialisiert die Gruppe von Eigenschaften, die automatisch von COleControl unterstützt werden, der mehr Speicherplatz als nur verwendet, die benutzerdefinierten Eigenschaften des Steuerelements. SerialisierenDas Entfernen dieses Aufrufs ermöglicht es dem Objekt, dass nur die Eigenschaften zu serialisieren, die Sie berücksichtigen sollten.Jede vordefinierte Eigenschaft gibt das Steuerelement verfügt über keine Implementierung serialisiert, wenn sie das Steuerelementobjekt gespeichert oder geladen werden, es sei denn, Sie PX_ Aufrufe für sie explizit hinzufügen.

Implementieren Versions-Unterstützung

Gibt für COM+-Objekte aktiviert ein überarbeitetes ActiveX-Steuerelement, um neue dauerhafte Eigenschaften hinzuzufügen, und ist immer noch in der Lage, den permanenten Zustand zu erkennen und zu laden, der von einer früheren Version des Steuerelements erstellt wird.Um die Version eines Steuerelements bereitstellen als Teil der permanenten Daten, rufen Sie COleControl::ExchangeVersion in der DoPropExchange-Funktion des Steuerelements.Dieser Aufruf wird automatisch eingefügt, wenn das ActiveX-Steuerelement mit dem ActiveX-Steuerelement-Assistenten erstellt wurde.Er kann entfernt werden, wenn die Version nicht benötigt wird.Allerdings sind die Kosten in der Steuerelementgröße (4 Bytes) für die hinzugefügte Flexibilität sehr klein, die die Version bereitgestellt werden.

Wenn das Steuerelement nicht mit dem ActiveX-Steuerelement-Assistenten erstellt wurde, fügen Sie einen Aufruf COleControl::ExchangeVersion hinzu, indem Sie die folgende Zeile am Anfang der DoPropExchange-Funktion einfügen (vor dem Aufruf von COleControl::DoPropExchange):

void CMyAxSerCtrl::DoPropExchange(CPropExchange* pPX)
{
    ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    COleControl::DoPropExchange(pPX);


...


}

Sie können jedes DWORD als die Versionsnummer verwenden.ActiveX-Steuerelement-Assistenten-Verwendung die von Projekten generiert _wVerMinor und _wVerMajor als Standard.Hierbei handelt es sich um globale Konstanten, die in der Implementierungsdatei der ActiveX-Steuerelementklasse des Projekts definiert sind.Innerhalb des verbliebenen Teils der DoPropExchange-Funktion, können Sie CPropExchange::GetVersion jederzeit aufrufen, um die Version abzurufen, die Sie speichern oder abrufen.

Im folgenden Beispiel verfügt, Version 1, Steuerelements in diesem Beispiel nur eine Eigenschaft "ReleaseDate".In Version 2 wird eine Eigenschaft "OriginalDate" hinzu.Wenn das Steuerelement angewiesen wird, um den beibehaltenen Zustand aus der alten Version zu laden, initialisiert er die Membervariable für die neue Eigenschaft ein Standardwert.

void CMyAxSerCtrl::DoPropExchange(CPropExchange* pPX)
{
    ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    COleControl::DoPropExchange(pPX);

   PX_Long(pPX, _T("ReleaseDate"), m_ReleaseDate);
   if (pPX->GetVersion() >= MAKELONG(0, 2))
   {
      PX_Long(pPX, _T("OriginalDate"), m_OriginalDate);
   }
   else
   {
      if (pPX->IsLoading())
         m_OriginalDate = 0;
   }


...


}

Standardmäßig "konvertiert" ein Steuerelement alte Daten in das aktuelle Format.Wenn beispielsweise Version 2 eines Steuerelements Daten lädt, das von Version 1 gespeichert wurden, schreibt sie das Format der Version 2, wenn sie erneut gespeichert wird.Wenn Sie das Steuerelement Daten zuletzt im Format lesen speichern möchten, führen Sie FALSE als dritter Parameter, wenn Sie ExchangeVersion aufrufen.Dieser dritte Parameter ist optional und befindet sich standardmäßig TRUE.

Siehe auch

Konzepte

MFC-ActiveX-Steuerelemente