12.04.2014 Views

6 folii na stronę

6 folii na stronę

6 folii na stronę

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Do czego służą monikery?<br />

Programowanie składnikowe<br />

w modelu COM<br />

Jarosław Francik<br />

czerwiec 2002<br />

Institute of Informatics, Silesian University of Technology, Gliwice, Poland<br />

Monikery<br />

• Zastosowanie – dwa w jednym:<br />

– inteligentne <strong>na</strong>zwy obiektów<br />

– inicjalizowanie obiektów<br />

• Co ma jedno do drugiego?<br />

class CPoint<br />

{<br />

CPoint (int x, int y);<br />

void Draw();<br />

};<br />

CPoint *p =<br />

new CPoint(10, 10);<br />

Institute of Informatics, Silesian University of Technology, Gliwice, Poland<br />

interface IPoint<br />

{<br />

HRESULT Draw();<br />

};<br />

IPoint *p = NULL;<br />

CoCreateInstance(clsid,...<br />

IID_IPoint, (void**)&p);<br />

CoCreateInstance nie jest odpowiednikiem<br />

konstruktora: nie ma parametrów wywołania<br />

Monikery – istota działania<br />

Monikery standardowe<br />

<strong>na</strong>zwa obiektu<br />

MONIKER<br />

point:10,10<br />

arkusz.xls<br />

arkusz.xls!Sheet1!R1C1:R10C6<br />

216C83D7-4621-4ffd-A87D-61DD9C3D2A66<br />

plikowy<br />

elementowy<br />

klasowy<br />

złożony<br />

URL<br />

CreateFileMoniker<br />

CreateItemMoniker<br />

CreateClassMoniker<br />

CreateURLMoniker<br />

ścieżka i <strong>na</strong>zwa pliku<br />

obiekt zawarty w innym<br />

obiekcie<br />

„opakowanie” CLSID:<br />

obiekt klasy<br />

CreateGenericComposite superpozycja kilku<br />

monikerów<br />

URL<br />

instancja obiektu<br />

Institute of Informatics, Silesian University of Technology, Gliwice, Poland<br />

wskaźnikowy CreatePointerMoniker<br />

OBJREF<br />

antymoniker<br />

CreateObjrefMoniker<br />

CreateAntiMoniker<br />

Institute of Informatics, Silesian University of Technology, Gliwice, Poland<br />

identyfikuje obiekt<br />

w stanie aktywnym<br />

uszeregowany wskaźnik do<br />

interfejsu IUnknown<br />

odwrotność monikera<br />

Interfejs IMoniker<br />

Stosowanie <strong>na</strong>zw symbolicznych<br />

• Dziedziczy po IPersistStream<br />

• Ciekawsze funkcje składowe:<br />

GetDisplayName<br />

zwraca <strong>na</strong>zwę symboliczną<br />

ParseDisplayName<br />

przekształca <strong>na</strong>zwę symboliczną w moniker<br />

BindToObject<br />

dowiązuje obiekt <strong>na</strong>zywany przez moniker<br />

Reduce<br />

redukuje moniker do <strong>na</strong>jprostszej postaci<br />

ComposeWith<br />

łączy monikery tworząc moniker złożony<br />

Institute of Informatics, Silesian University of Technology, Gliwice, Poland<br />

• Metoda IMoniker::ParseDisplayName<br />

• Funkcja MkParseDisplayName<br />

– dla podanego łańcucha tworzy moniker<br />

– przyjmuje dwa typy <strong>na</strong>zw:<br />

• ścieżka do pliku, np:<br />

c:\moje dokumenty\arkusz.xls<br />

• standardowa <strong>na</strong>zwa obiektu:<br />

ProgID:Nazwa-obiektu<br />

gdzie:<br />

ProgID – zarejestrowany prog id monikera<br />

Nazwa-obiektu – <strong>na</strong>zwa rozpoz<strong>na</strong>wal<strong>na</strong> dla monikera<br />

•przykład dla monikera klasowego:<br />

clsid:216C83D7-4621-4ffd-A87D-61DD9C3D2A66<br />

Institute of Informatics, Silesian University of Technology, Gliwice, Poland<br />

1

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!