Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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:
DECLARE_CLASSFACTORY Az osztály-előállítót CComClassFactory-nak deklarálja.
DECLARE_AGGREGATABLE Deklarálja, hogy az objektum összesíthető.
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.