Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird erläutert, wie Sie ein ActiveX-Steuerelement serialisieren. Serialisierung ist der Prozess des Lesens von oder Schreiben in ein beständiges Speichermedium, z. B. eine Datenträgerdatei. Die Microsoft Foundation Class (MFC)-Bibliothek bietet integrierte Unterstützung für die Serialisierung in der Klasse CObject. COleControl erweitert diese Unterstützung auf ActiveX-Steuerelemente durch die Verwendung eines Eigenschaftsaustauschmechanismus.
Von Bedeutung
ActiveX ist eine ältere Technologie, die nicht für die neue Entwicklung verwendet werden sollte. Weitere Informationen zu modernen Technologien, die ActiveX ersetzen, finden Sie unter ActiveX-Steuerelemente.
Serialisierung für ActiveX-Steuerelemente wird durch Überschreiben von COleControl::DoPropExchange implementiert. Diese Funktion, die beim Laden und Speichern des Steuerelementobjekts aufgerufen wird, speichert alle Eigenschaften, die mit einer Membervariable oder einer Membervariable mit Änderungsbenachrichtigung implementiert wurden.
In den folgenden Themen werden die wichtigsten Probleme im Zusammenhang mit der Serialisierung eines ActiveX-Steuerelements behandelt:
Implementieren der
DoPropExchangeFunktion zum Serialisieren des Steuerungsobjekts
Implementieren der DoPropExchange-Funktion
Wenn Sie den ActiveX-Steuerelement-Assistenten zum Generieren des Steuerelementprojekts verwenden, werden der Steuerelementklasse automatisch mehrere Standardhandlerfunktionen hinzugefügt, einschließlich der Standardimplementierung von COleControl::D oPropExchange. Das folgende Beispiel zeigt den Code, der den Klassen hinzugefügt wurde, die mit dem ActiveX Control-Assistent erstellt wurden.
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 persistent machen möchten, ändern Sie DoPropExchange, indem Sie einen Aufruf der Eigenschaftsaustauschfunktion hinzufügen. Im folgenden Beispiel wird die Serialisierung einer benutzerdefinierten booleschen CircleShape-Eigenschaft veranschaulicht, bei 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 sind die möglichen Eigenschaftenaustauschfunktionen aufgeführt, die Sie zum Serialisieren der Eigenschaften des Steuerelements verwenden können:
| Eigenschaften-Austausch-Funktionen | Zweck |
|---|---|
| PX_Blob( ) | Serialisiert eine Dateneigenschaft des Typs Binary Large Object (BLOB). |
| PX_Bool( ) | Serialisiert einen Typ Boolesche Eigenschaft. |
| PX_Color( ) | Serialisiert eine Farbeigenschaft eines Typs. |
| PX_Currency( ) | Serialisiert eine Eigenschaft vom Typ CY (Währung). |
| PX_Double( ) | Serialisiert eine Eigenschaft des Typs double. |
| PX_Font( ) | Serialisiert eine Schriftarttypeigenschaft. |
| PX_Float( ) | Serialisiert eine Eigenschaft des Typs float. |
| PX_IUnknown( ) | Serialisiert eine Eigenschaft vom Typ LPUNKNOWN. |
| PX_Long( ) | Serialisiert eine Eigenschaft des Typs long. |
| PX_Picture( ) | Serialisiert eine Bildeigenschaft vom Typ. |
| PX_Short( ) | Serialisiert eine Eigenschaft des Typs short. |
| PXstring( ) | Serialisiert eine Eigenschaft des Typs CString. |
| PX_ULong( ) | Serialisiert eine Eigenschaft vom Typ ULONG. |
| PX_UShort( ) | Serialisiert eine Eigenschaft des Typs USHORT. |
Weitere Informationen zu diesen Eigenschaftenaustauschfunktionen finden Sie unter Persistenz von OLE-Steuerelementen in der MFC-Referenz.
Anpassen des Standardverhaltens von DoPropExchange
Die Standardimplementierung von DoPropertyExchange (wie im vorherigen Thema gezeigt) führt einen Aufruf der Basisklasse COleControldurch. Dadurch werden die automatisch unterstützten Eigenschaften von COleControl serialisiert, wodurch mehr Speicherplatz verwendet wird, als wenn nur die benutzerdefinierten Eigenschaften des Steuerelements serialisiert werden. Durch das Entfernen dieses Aufrufs kann Ihr Objekt nur die Eigenschaften serialisieren, die Sie als wichtig erachten. Alle Bestandseigenschaften, die die Steuerung implementiert hat, werden beim Speichern oder Laden des Steuerungsobjekts nicht serialisiert, es sei denn, Sie fügen explizit PX_Calls für sie hinzu.
Implementieren der Versionsunterstützung
Die Versionsunterstützung ermöglicht ein überarbeitetes ActiveX-Steuerelement zum Hinzufügen neuer persistenter Eigenschaften und kann den persistenten Zustand, der von einer früheren Version des Steuerelements erstellt wurde, weiterhin erkennen und laden. Um die Version eines Steuerelements als Teil seiner persistenten Daten verfügbar zu machen, rufen Sie COleControl::ExchangeVersion in der Funktion des Steuerelements DoPropExchange auf. Dieser Aufruf wird automatisch eingefügt, wenn das ActiveX-Steuerelement mithilfe des ActiveX-Steuerelement-Assistenten erstellt wurde. Sie kann entfernt werden, wenn keine Versionsunterstützung erforderlich ist. Die Kosten für die Steuerungsgröße sind jedoch sehr gering (4 Bytes), da die Versionsunterstützung zusätzliche Flexibilität bietet.
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 (vor dem Aufruf von COleControl::DoPropExchange) einfügen.
void CMyAxSerCtrl::DoPropExchange(CPropExchange* pPX)
{
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
COleControl::DoPropExchange(pPX);
}
Sie können ein beliebiges DWORD als Versionsnummer verwenden. Projekte, die vom ActiveX-Steuerelement-Assistenten generiert werden, verwenden _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 restlichen Bereichs Ihrer 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 dieses Beispielsteuerelements nur über eine "ReleaseDate"-Eigenschaft. Version 2 fügt eine "OriginalDate"-Eigenschaft hinzu. Wenn das Steuerelement angewiesen wird, den persistenten Zustand aus der alten Version zu laden, initialisiert es die Membervariable für die neue Eigenschaft auf einen 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 neueste Format. Wenn z. B. Version 2 eines Steuerelements Daten lädt, die von Version 1 gespeichert wurden, schreibt es das Version 2-Format, wenn es erneut gespeichert wird. Wenn das Steuerelement Daten im Format speichern soll, das zuletzt gelesen wurde, übergeben Sie FALSE als dritten Parameter beim Aufrufen ExchangeVersion. Dieser dritte Parameter ist optional und standardmäßig TRUE .