CComCoClass osztály

Megjegyzés:

Az aktív sablontár (ATL) továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

Ez az osztály metódusokat biztosít egy osztály példányainak létrehozásához és tulajdonságainak beszerzéséhez.

Szemantika

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

Paraméterek

T
Az osztály, származik CComCoClass.

pclsid
Az objektum CLSID azonosítójára mutató mutató.

Tagok

Nyilvános módszerek

Név Description
CComCoClass::CreateInstance (Statikus) Létrehozza az osztály egy példányát és lekérdezéseket egy interfészhez.
CComCoClass::Error (Statikus) Részletes hibainformációkat ad vissza az ügyfélnek.
CComCoClass::GetObjectCLSID (Statikus) Az objektum osztályazonosítóját adja vissza.
CComCoClass::GetObjectDescription (Statikus) Felülbírálás az objektum leírásának visszaadásához.

Megjegyzések

CComCoClass Metódusokat biztosít az objektum CLSID-jének beolvasásához, a hibaadatok beállításához és az osztály példányainak létrehozásához. Az objektumtérképen regisztrált osztályokat a következőből CComCoClasskell származtatni: .

CComCoClass Emellett meghatározza az objektum alapértelmezett osztály-előállítóját és összesítési modelljét is. CComCoClass A következő két makrót használja:

Ezen alapértelmezett beállítások bármelyikét felülbírálhatja egy másik makró megadásával az osztálydefinícióban. A CComClassFactory2CComClassFactoryhelyett például adja meg a DECLARE_CLASSFACTORY2 makrót:

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

Requirements

Fejléc: atlcom.h

CComCoClass::CreateInstance

Ezekkel a CreateInstance függvényekkel létrehozhat egy COM-objektumpéldányt, és lekérhet egy felületmutatót a COM API használata nélkül.

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

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

Paraméterek

Q
A PP-n keresztül visszaadandó COM-felület.

punkOuter
[in] Az aggregátum külső ismeretlen vagy vezérlő ismeretlen.

Pp
[kifelé] Annak a mutatóváltozónak a címe, amely a kért felületmutatót fogadja, ha a létrehozás sikeres.

Visszaadott érték

Standard HRESULT érték. A lehetséges visszatérési értékek leírását lásd a Windows SDK CoCreateInstance elemében.

Megjegyzések

Használja a függvény első túlterhelését a tipikus objektumlétrehozáshoz; használja a második túlterhelést, amikor összesítenie kell a létrehozott objektumot.

A szükséges COM-objektumot implementáló ATL-osztálynak (vagyis a CComCoClass első sablonparamétereként használt osztálynak) ugyanabban a projektben kell lennie, mint a hívó kódnak. A COM-objektum létrehozását az ehhez az ATL-osztályhoz regisztrált osztály-előállító végzi.

Ezek a függvények olyan objektumok létrehozásához hasznosak, amelyeket a OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO makró használatával megakadályozott külsőleg hamvasztással. Olyan helyzetekben is hasznosak, amikor a hatékonyság érdekében el szeretné kerülni a COM API-t.

Vegye figyelembe, hogy a Q interfészhez egy IID-nek kell tartoznia, amely a __uuidof operátorral kérhető le.

Example

Az alábbi példában egy varázsló által létrehozott ATL-osztály találhatóCComCoClass, CDocument amely az IDocument interfészt implementálja. Az osztály regisztrálva van az objektumtérképen a OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO makróval, így az ügyfelek nem hozhatnak létre példányokat a dokumentumból a CoCreateInstance használatával. CApplication Egy CoClass, amely egy metódust biztosít az egyik saját COM-felületén a dokumentumosztály példányainak létrehozásához. Az alábbi kód bemutatja, milyen könnyen hozhat létre példányokat a dokumentumosztályból az CreateInstance alaposztálytól CComCoClass örökölt tag használatával.

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

CComCoClass::Error

Ez a statikus függvény beállítja a felületet, IErrorInfo hogy hibainformációkat adjon meg az ügyfélnek.

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());

Paraméterek

lpszDesc
[in] A hibát leíró sztring. Az lpszDesc Unicode-verziója Error LPCOLESTR típusú, az ANSI-verzió pedig az LPCSTR típusát adja meg.

iid
[in] A hibát vagy GUID_NULL (az alapértelmezett értéket) meghatározó felület IID azonosítója, ha a hibát az operációs rendszer határozza meg.

hRes
[in] A hívónak visszaadni kívánt HRESULT. Az alapértelmezett érték 0. További részletek a hRes-ről: Megjegyzések.

nID
[in] Az erőforrás-azonosító, ahol a hibaleírási sztringet tárolja. Ennek az értéknek 0x0200 és 0xFFFF közé kell esnie, beleértve azokat is. Hibakeresési buildekben az ASSERT függvény akkor jön létre, ha az nID nem indexel érvényes sztringet. A kiadási buildekben a hibaleírási sztring "Ismeretlen hiba" értékre lesz állítva.

dwHelpID
[in] A hiba súgókörnyezet-azonosítója.

lpszHelpFile
[in] A hibát leíró súgófájl elérési útja és neve.

hInst
[in] Az erőforrás leírója. Alapértelmezés szerint ez a _AtlModule::GetResourceInstance_AtlModule paraméter a CAtlModule globális példánya.

Visszaadott érték

Standard HRESULT érték. További részletekért lásd: Megjegyzések.

Megjegyzések

A híváshoz Erroraz objektumnak implementálnia kell az interfészt ISupportErrorInfo .

Ha a hRes paraméter nem rezero, akkor Error a hRes értékét adja vissza. Ha a hRes értéke nulla, akkor a visszatérés első négy verziója Error DISP_E_EXCEPTION. Az utolsó két verzió a makró MAKE_HRESULT (1, FACILITY_ITF,nID) eredményét adja vissza.

CComCoClass::GetObjectCLSID

Konzisztens módot biztosít az objektum CLSID-jének beolvasására.

static const CLSID& WINAPI GetObjectCLSID();

Visszaadott érték

Az objektum osztályazonosítója.

CComCoClass::GetObjectDescription

Ez a statikus függvény lekéri az osztályobjektum szövegleírását.

static LPCTSTR WINAPI GetObjectDescription();

Visszaadott érték

Az osztályobjektum leírása.

Megjegyzések

Az alapértelmezett implementáció null értéket ad vissza. Ezt a metódust felülbírálhatja a DECLARE_OBJECT_DESCRIPTION makróval. Például:

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 meghívja: IComponentRegistrar::GetComponents. IComponentRegistrar Egy Automation-felület, amellyel regisztrálhatja és megszüntetheti az egyes összetevők regisztrálását egy DLL-ben. Amikor létrehoz egy összetevőregisztráló objektumot az ATL-projektvarázslóval, a varázsló automatikusan implementálja a IComponentRegistrar felületet. IComponentRegistrar jellemzően a Microsoft Transaction Server használja.

Az ATL-projektvarázslóról további információt az ATL-projekt létrehozása című cikkben talál.

Lásd még

osztály áttekintése