6 folii na stronÄ
6 folii na stronÄ
6 folii na stronÄ
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