Funkcje pomocnika tworzenia wystąpienia
W poprzednich wersjach modelu COM podstawowy mechanizm używany do tworzenia wystąpienia obiektu to funkcja CoCreateInstance. Ta funkcja hermetyzuje proces tworzenia obiektu klasy przy użyciu tej funkcji w celu utworzenia nowego wystąpienia i zwolnienia obiektu klasy. Inną funkcją tego rodzaju jest bardziej szczegółowa OleCreate, pomocnik dokumentu złożonego OLE, który tworzy obiekt klasy i pobiera wskaźnik do żądanego obiektu.
Aby wygładzyć proces tworzenia wystąpień w systemach rozproszonych, com wprowadził cztery ważne nowe mechanizmy tworzenia wystąpień:
- Klasy monikers i IClassActivator
- CoCreateInstanceEx
- CoGetInstanceFromFile
- CoGetInstanceFromIStorage
Moniker klasy umożliwia identyfikację klasy obiektu i jest zwykle używany z innym pseudonimem, na przykład monikerem pliku, aby wskazać lokalizację obiektu. Umożliwia to powiązanie z obiektem i określenie serwera, który ma zostać uruchomiony dla tego obiektu. Elementy monikers klas mogą również składać się z prawej strony elementów monikers obsługujących powiązanie z interfejsem IClassActivator. Aby uzyskać więcej informacji, zobacz Class Monikers.
CoCreateInstanceEx rozszerza CoCreateInstance, aby umożliwić utworzenie pojedynczego niezainicjowanego obiektu skojarzonego z danym identyfikatorem CLSID na określonej maszynie zdalnej. Ponadto zamiast żądać pojedynczego interfejsu i uzyskania pojedynczego wskaźnika do tego interfejsu, CoCreateInstanceEx umożliwia wykonywanie zapytań o wiele interfejsów i (jeśli jest dostępna) odbieranie wskaźników do nich w jednej rundzie, co pozwala na mniej rund między maszynami. Może to sprawić, że interakcja z obiektem zdalnym będzie znacznie wydajniejsza. W tym celu funkcja używa tablicy struktur MULTI_QI.
Utworzenie obiektu za pomocą CoCreateInstanceEx nadal wymaga zainicjowania obiektu za pomocą wywołania jednego z interfejsów inicjowania (takich jak IPersistStorage::Load). Funkcje pomocnicze CoGetInstanceFromFile i CoGetInstanceFromIStorage hermetyzują zarówno możliwości tworzenia wystąpienia CoCreateInstanceEx, jak i inicjowania, były z pliku i z drugiego z magazynu.