Udostępnij za pośrednictwem


Klasa CComCoClass

Ta klasa udostępnia metody tworzenia wystąpień klasy i uzyskiwania jej właściwości.

Składnia

template <class T, const CLSID* pclsid = &CLSID_NULL>
class CComCoClass

Parametry

T
Klasa pochodząca z CComCoClassklasy .

pclsid
Wskaźnik do identyfikatora CLSID obiektu.

Członkowie

Metody publiczne

Nazwa/nazwisko opis
CComCoClass::CreateInstance (Statyczne) Tworzy wystąpienie klasy i kwerend dla interfejsu.
CComCoClass::Error (Statyczne) Zwraca zaawansowane informacje o błędzie do klienta.
CComCoClass::GetObjectCLSID (Statyczne) Zwraca identyfikator klasy obiektu.
CComCoClass::GetObjectDescription (Statyczne) Zastąpić, aby zwrócić opis obiektu.

Uwagi

CComCoClass Udostępnia metody pobierania identyfikatora CLSID obiektu, ustawiania informacji o błędach i tworzenia wystąpień klasy. Każda klasa zarejestrowana na mapie obiektu powinna pochodzić z CComCoClassklasy .

CComCoClass Definiuje również domyślną fabrykę klas i model agregacji dla obiektu. CComCoClass używa następujących dwóch makr:

  • DECLARE_CLASSFACTORY deklaruje fabrykę klas jako CComClassFactory.

  • DECLARE_AGGREGATABLE deklaruje, że obiekt można agregować.

Możesz zastąpić jedną z tych wartości domyślnych, określając inne makro w definicji klasy. Aby na przykład użyć CComClassFactory2 zamiast CComClassFactory, określ makro DECLARE_CLASSFACTORY2 :

class ATL_NO_VTABLE CMyClass2 :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CMyClass2, &CLSID_MyClass>,
   public IDispatchImpl<IMyClass, &IID_IMyClass, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
   public IDispatchImpl<IMyDualInterface, &__uuidof(IMyDualInterface), &LIBID_NVC_ATL_COMLib, /* wMajor = */ 1, /* wMinor = */ 0>
{
public:
   DECLARE_CLASSFACTORY2(CMyLicense)

   // Remainder of class declaration omitted

Wymagania

Nagłówek: atlcom.h

CComCoClass::CreateInstance

Użyj tych CreateInstance funkcji, aby utworzyć wystąpienie obiektu COM i pobrać wskaźnik interfejsu bez użycia interfejsu API COM.

template <class  Q>
static HRESULT CreateInstance( Q** pp);

template <class  Q>
static HRESULT CreateInstance(IUnknown* punkOuter, Q** pp);

Parametry

P
Interfejs COM, który powinien zostać zwrócony za pośrednictwem pp.

punkOuter
[in] Zewnętrzna nieznana lub kontrolująca nieznany element agregacji.

S
[out] Adres zmiennej wskaźnika, która odbiera żądany wskaźnik interfejsu, jeśli tworzenie zakończy się pomyślnie.

Wartość zwracana

Standardowa wartość HRESULT. Aby uzyskać opis możliwych wartości zwracanych, zobacz CoCreateInstance w zestawie Windows SDK.

Uwagi

Użyj pierwszego przeciążenia tej funkcji do typowego tworzenia obiektów; użyj drugiego przeciążenia, gdy musisz zagregować tworzony obiekt.

Klasa ATL implementujący wymagany obiekt COM (czyli klasa używana jako pierwszy parametr szablonu do CComCoClass) musi znajdować się w tym samym projekcie co kod wywołujący. Tworzenie obiektu COM jest przeprowadzane przez fabrykę klas zarejestrowaną dla tej klasy ATL.

Te funkcje są przydatne do tworzenia obiektów, których nie można było tworzyć zewnętrznie creatable przy użyciu makra OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO . Są one również przydatne w sytuacjach, w których chcesz uniknąć interfejsu API COM ze względu na wydajność.

Należy pamiętać, że interfejs Q musi mieć skojarzony z nim identyfikator IID, który można pobrać przy użyciu operatora __uuidof .

Przykład

W poniższym przykładzie CDocument jest wygenerowana przez kreatora klasa ATL, która CComCoClass implementuje IDocument interfejs. Klasa jest rejestrowana na mapie obiektów za pomocą makra OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO, dzięki czemu klienci nie mogą tworzyć wystąpień dokumentu przy użyciu funkcji CoCreateInstance. CApplication jest klasą CoClass, która udostępnia metodę na jednym z własnych interfejsów COM w celu utworzenia wystąpień klasy dokumentów. Poniższy kod pokazuje, jak łatwo utworzyć wystąpienia klasy dokumentów przy użyciu składowej CreateInstance dziedziczonej z klasy bazowej CComCoClass .

STDMETHODIMP CMyApp::CreateDocument( /* [out, retval] */ IDocument** ppDoc)
{
   *ppDoc = NULL;
   return CMyDoc::CreateInstance(ppDoc);
}

CComCoClass::Error

Ta funkcja statyczna konfiguruje IErrorInfo interfejs w celu udostępnienia klientowi informacji o błędzie.

static HRESULT WINAPI Error(
    LPCOLESTR lpszDesc,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

static HRESULT WINAPI Error(
    LPCOLESTR lpszDesc,
    DWORD dwHelpID,
    LPCOLESTR lpszHelpFile,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

static HRESULT WINAPI Error(
    LPCSTR lpszDesc,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

static HRESULT WINAPI Error(
    LPCSTR lpszDesc,
    DWORD dwHelpID,
    LPCSTR lpszHelpFile,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

static HRESULT WINAPI Error(
    UINT nID,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0,
    HINSTANCE hInst = _AtlBaseModule.GetResourceInstance ());

static HRESULT Error(
    UINT nID,
    DWORD dwHelpID,
    LPCOLESTR lpszHelpFile,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0,
    HINSTANCE hInst = _AtlBaseModule.GetResourceInstance());

Parametry

lpszDesc
[in] Ciąg opisujący błąd. Wersja Error Unicode określa, że lpszDesc jest typu LPCOLESTR; wersja ANSI określa typ LPCSTR.

Iid
[in] Identyfikator IID interfejsu definiujący błąd lub GUID_NULL (wartość domyślna), jeśli błąd jest zdefiniowany przez system operacyjny.

Hres
[in] HrESULT, który ma zostać zwrócony do wywołującego. Wartość domyślna to 0. Aby uzyskać więcej informacji na temat hRes, zobacz Uwagi.

Nid
[in] Identyfikator zasobu, w którym jest przechowywany ciąg opisu błędu. Ta wartość powinna znajdować się między 0x0200 a 0xFFFF włącznie. W kompilacjach debugowania funkcja ASSERT będzie skutkować tym, że identyfikator nID nie indeksuje prawidłowego ciągu. W kompilacjach wydania ciąg opisu błędu zostanie ustawiony na "Nieznany błąd".

dwHelpID
[in] Identyfikator kontekstu pomocy dla błędu.

lpszHelpFile
[in] Ścieżka i nazwa pliku pomocy opisującego błąd.

hInst
[in] Dojście do zasobu. Domyślnie ten parametr to _AtlModule::GetResourceInstance, gdzie _AtlModule jest globalnym wystąpieniem CAtlModule.

Wartość zwracana

Standardowa wartość HRESULT. Aby uzyskać szczegółowe informacje, zobacz Uwagi.

Uwagi

Aby wywołać Errormetodę ISupportErrorInfo , obiekt musi zaimplementować interfejs.

Jeśli parametr hRes jest niezerowy, zwraca Error wartość hRes. Jeśli wartość hRes wynosi zero, wówczas pierwsze cztery wersje zwracanych Error DISP_E_EXCEPTION. Ostatnie dwie wersje zwracają wynik makra MAKE_HRESULT( 1, FACILITY_ITF,nID).

CComCoClass::GetObjectCLSID

Zapewnia spójny sposób pobierania identyfikatora CLSID obiektu.

static const CLSID& WINAPI GetObjectCLSID();

Wartość zwracana

Identyfikator klasy obiektu.

CComCoClass::GetObjectDescription

Ta funkcja statyczna pobiera opis tekstu dla obiektu klasy.

static LPCTSTR WINAPI GetObjectDescription();

Wartość zwracana

Opis obiektu klasy.

Uwagi

Domyślna implementacja zwraca wartość NULL. Tę metodę można zastąpić za pomocą makra DECLARE_OBJECT_DESCRIPTION . Na przykład:

class ATL_NO_VTABLE CMyDoc :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CMyDoc, &CLSID_MyDoc>,
   public IDocument
{
public:
   DECLARE_OBJECT_DESCRIPTION("My Document Object 1.0")

   // Remainder of class declaration omitted.

GetObjectDescription program jest wywoływany przez IComponentRegistrar::GetComponents. IComponentRegistrar to interfejs automatyzacji, który umożliwia rejestrowanie i wyrejestrowywanie poszczególnych składników w dll. Po utworzeniu obiektu rejestratora składników za pomocą Kreatora projektu ATL kreator automatycznie zaimplementuje IComponentRegistrar interfejs. IComponentRegistrar jest zwykle używany przez serwer transakcji firmy Microsoft.

Aby uzyskać więcej informacji na temat Kreatora projektu ATL, zobacz artykuł Tworzenie projektu ATL.

Zobacz też

Omówienie klasy