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 CComCoClass
klasy .
pclsid
Wskaźnik do identyfikatora CLSID obiektu.
Elementy członkowskie
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 CComCoClass
klasy .
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.
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
Q
Interfejs COM, który powinien zostać zwrócony za pośrednictwem pp.
punkOuter
[in] Zewnętrzna nieznana lub kontrolująca nieznany element agregacji.
Pp
[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.
identyfikator 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ć Error
metodę 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.