Udostępnij za pośrednictwem


Formanty MFC ActiveX: serializacja

W tym artykule omówiono sposób szeregować formantu ActiveX.Serializacja jest proces Odczyt lub zapis na nośniku magazynu trwałego, takich jak pliku na dysku.Biblioteka Microsoft Foundation Class (MFC) udostępnia wbudowaną obsługę serializacji w klasie CObject.COleControlrozszerzenie tej obsługi formantów ActiveX za pomocą mechanizmu wymiany właściwość.

Serializacji dla formantów ActiveX jest implementowane przez zastąpienie COleControl::DoPropExchange.Ta funkcja, wywoływana podczas ładowania i zapisywania obiektu formantu przechowuje wszystkie właściwości prowadzone ze zmienną lub zmienna członka z powiadomień o zmianach.

Poniższe tematy obejmują najważniejsze zagadnienia związane z szeregowania formantu ActiveX:

  • Wykonawczych DoPropExchange funkcji do serializacji obiektu formantu

  • Dostosowywanie procesu serializacji

  • Obsługa wersji wykonawczych

Wykonywania funkcji DoPropExchange

Korzystając z Kreatora formantów ActiveX do generowania projektu kontroli, funkcje obsługi kilku domyślne są automatycznie dodawane do klasy formantu, w tym wdrożenie domyślne COleControl::DoPropExchange.Kod dodany do klas utworzonych za pomocą Kreatora formantów ActiveX można znaleźć w poniższym przykładzie:

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

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

Aby trwale zapisać właściwość, należy zmodyfikować DoPropExchange przez dodanie wywołania funkcji exchange właściwość.W poniższym przykładzie zademonstrowano serializacji właściwość niestandardowa wartość logiczna CircleShape, gdy właściwość CircleShape ma wartość domyślną TRUE:

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


...


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

W poniższej tabeli przedstawiono funkcje wymiany możliwych właściwości, używanego do serializacji właściwości formantu:

Właściwość funkcje programu exchange

Cel

(PX_Blob)

Szereguje typ właściwości danych dużych obiektów binarnych (BLOB).

(PX_Bool)

Szereguje typu właściwość logiczna.

(PX_Color)

Szereguje type właściwość kolor.

(PX_Currency)

Szereguje typu CY właściwość (waluta).

(PX_Double)

Szereguje typu Podwójna właściwości.

(PX_Font)

Szereguje właściwość Typ czcionki.

(PX_Float)

Szereguje typu float właściwości.

(PX_IUnknown)

Szereguje właściwość typu LPUNKNOWN.

(PX_Long)

Szereguje typu długi właściwości.

(PX_Picture)

Szereguje typ właściwości obrazu.

(PX_Short)

Szereguje typu Krótki właściwości.

(PX_String)

Szereguje typu CString właściwości.

(PX_ULong)

Szereguje typu ULONG właściwości.

(PX_UShort)

Szereguje typu USHORT właściwości.

Aby uzyskać więcej informacji na temat tych właściwości funkcji programu exchange, zobacz Trwałość z OLE formantów w Odwołanie MFC.

Dostosowywanie zachowania domyślne DoPropExchange

Domyślna implementacja z DoPropertyExchange (jak pokazano w poprzednim temacie) sprawia, że połączenie klasa podstawowa COleControl.Szereguje to zbiór właściwości automatycznie obsługiwane przez COleControl, który używa więcej miejsca niż serializacji niestandardowej właściwości formantu.Usunięcie tego wywołania umożliwia obiekt do serializacji tylko te właściwości, które uznasz za istotne.Wszystkie Państwa pień właściwość formantu została zaimplementowana nie będą wykonywane szeregowo, podczas zapisywania lub ładowania obiektu kontroli, chyba że dodasz PX_ wzywa do nich.

Obsługa wersji wykonawczych

Obsługa wersji umożliwia poprawioną formantu ActiveX dodać nowe właściwości trwałe i nadal być w stanie wykryć i załadować zapamiętywania stanu, utworzony za pomocą starszej wersji formantu.Aby udostępnić wersja formantu jako część jego trwałe dane, wywołanie COleControl::ExchangeVersion w zakresie kontroli DoPropExchange funkcji.To wywołanie jest wstawiany automatycznie, jeśli formant ActiveX został utworzony za pomocą Kreatora formantów ActiveX.Można usunąć, jeśli nie jest potrzebna obsługa wersji.Koszt w rozmiarze formantu jest jednak bardzo małych (4 bajty) dodano elastyczność, która zapewnia obsługę wersji.

Jeśli formant nie został utworzony przy użyciu Kreatora formantu ActiveX, należy dodać wywołanie COleControl::ExchangeVersion przez wstawienie następujący wiersz na początku swojej DoPropExchange funkcja (przed wywołaniem do COleControl::DoPropExchange):

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


...


}

Można użyć dowolnego DWORD jako numer wersji.Użyj projektów wygenerowany przez kreatora formantu ActiveX _wVerMinor i _wVerMajor jako domyślny.Są to globalne stałe zdefiniowane w pliku implementacji klasy formantu ActiveX projektu.W ciągu pozostałej części sieci DoPropExchange funkcji, można wywołać CPropExchange::GetVersion w każdej chwili pobrać wersję podczas zapisywania lub pobierania.

W poniższym przykładzie wersja 1 tej próbki kontrolnej ma tylko właściwości "ReleaseDate".Wersja 2 dodaje właściwość "OriginalDate".Jeśli formant jest zobowiązana do załadowania trwały stan ze starej wersji, inicjuje zmienną dla nowej właściwości na wartość domyślną.

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;
   }


...


}

Domyślnie formant "konwertuje" stare dane do najnowszego formatu.Na przykład jeśli wersji 2 formantu powoduje załadowanie danych, który został zapisany w wersji 1, to zapisze format wersji 2 po zapisaniu go ponownie.Jeśli chcesz kontrolować dane zapisane w formacie ostatniego odczytu, przekazać FALSE jako trzeci parametr podczas wywoływania ExchangeVersion.Ten trzeci parametr jest opcjonalny i jest TRUE domyślnie.

Zobacz też

Koncepcje

Formanty MFC ActiveX