Historia wymaga pasterzy, nie rzeĹşnikĂłw.

1Val){ case EALIGN_CENTER:
m_lAlignment = EALIGN_CENTER;
break; case EALIGN_RIGHT:
m_lAlignment = EALIGN_RIGHT;
break; case EALIGN_LEFT:
m_lAlignment = EALIGN_LEFT;
break; }
// ustawiamy zwracaną wartość IResult = TRUE;
else {
/*
W tym punkcie możesz albo zgłosić problem związany z konwersja danych lub zmienić typ zwracany przez metodę i zwrócić wartość HRESULT z wywołania YariantChangeType ( ) . */
}
}
// jeśli wartość wyrównania jest niewłaściwa if (m_lAlignment < EALIGN_LEFT ||
m_lAlignment > EALIGN_RIGHT)
// ustaw domyślną wartość
m_lAlignment = EALIGN_LEFT;
// jeśli wszystko jest w porządku
if(TRUE == IResult)
{
// jeśli mamy łańcuch
if (IpctstrCaption != NULL)
// przypisujemy łańcuch naszej zmiennej składowej m_cstrCaption = IpctstrCaption;
// czy otrzymaliśmy błędne dane? if (m_lAlignment < EALIGN_LEFT ||
m_lAlignment > EALIGN_RIGHT)
// tak, ustaw domyślną wartość
m lAlignment = EALIGN LEFT;
// wymuszamy odmalowanie kontrolki this->InvalidateControl() ;
}
// zwracamy wynik wywołania funkcji return IResult;
Najpierw metoda próbuje obsłużyć domyślny parametr sprawdzając, czy wariant zawiera rzeczywiście to, czego chcemy, VT_I4, co odpowiada typowi long. Jeśli wariant nie zawiera typu long, metoda sprawdza, czy w ogóle zostały przekazane jakieś dane, sprawdzając typy VT_ERROR i VT_EMPTY. Sprawdzenie danych jest konieczne, ponieważ ten parametr jest opcjonalny. Parametr VARIANT może zawierać dane, ale nie musi, trzeba więc nie tylko sprawdzać poprawność danych, ale także ich obecność. Jeśli nie zostaną dostarczone żadne dane, metoda skorzysta z wartości już wcześniej umieszczonej w zmiennej składowej m_iAiignment.
Pewne sterowniki automatyzacji, takie jak Yisual Basic, nie wymagają, by przy wywoływaniu metody był dostarczany którykolwiek z opcjonalnych parametrów. Na przykład, z Visual Basica metodę captionMethod () możesz wywołać następująco:
MyObject.CaptionMethod "Hello"
lub ewentualnie tak:
MyObject.CaptionMethod "Hello", True
Yisual Basic automatycznie przekazuje w zmiennej VARIANT typ VT_ERROR dla każdego z parametrów, które zostały pominięte w wywołaniu metody. Dla sterowników automatyzacji wywołujących standardową metodę OLE invoke (), takich jak C++, wywołujący sterownik musi zdefiniować wszystkie parametry, nawet jeśli kontrolka lub kontener z nich nie korzystają. W tym konkretnym przypadku, gdy wywołujemy metodę, mamy do wyboru ustawienie typu wariantu na VT_ERROR lub VT_EMPTY.
Podczas przetwarzania opcjonalnych parametrów oparcie się na wbudowanych w OLE procedurach konwersji typów wariantów w poszukiwaniu określonego typu danych gwarantuje, że kontrolka będzie mogła obsłużyć każdą przekazaną j ej daną.
Jeśli wariant zawiera inny poprawny typ danych inny niż VT_I4, metoda próbuje skon-wertować go na typ VT_I4. Dzięki temu możemy obsłużyć przypadki, gdy użytkownik przekazuje poprawną lecz innego typu wartość, na przykład short lub łańcuch.
Zwróć uwagę na użycie funkcji Variantinit (). Bardzo ważne jest, by Twoje programy inicjowały przed użyciem wszystkie zmienne typuVARIANT. Dzięki temu będziesz miał pewność, że te zmienne nie będą zawierały błędnych informacji o typie ani błędnych wartości. Wywołanie Variantinit () w celu zainicjalizowania zmiennych VARIANT jest zgodne z obowiązującą w C++ tendencją do inicjalizowania zmiennych składowych w celu zapewnienia, że nie będą one zawierać błędnych informacji.
Jeśli wymagania co do kontrolki określają użycie tylko specyficznych typów danych, możesz także dodać kod (komunikaty błędów, wyjątki itd.) reagujący na fakt nieotrzymania przez kontrolkę odpowiedniego typu danych. W przypadku naszej metody caption-Method (), jeśli funkcja YariantchangeType (} nie będzie w stanie dokonać konwersji danych, metoda kończy działanie, zwracając wartość FALSE. Zwrócenie wartości FALSE informuje funkcję wywołującą, że wykonanie metody się nie powiodło. Także w tym przypadku możesz zastosować dodatkowy kod obsługi błędów w celu przekazania użytkownikowi jakichś dodatkowych informacji o błędzie.

Podstrony