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:
A Microsoft Foundation Classes (MFC) könyvtár továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.
Az osztályok CObject számos CRuntimeClass objektumszolgáltatást foglalnak magában, beleértve a futásidejű osztályinformációkhoz való hozzáférést, a szerializálást és a dinamikus objektumlétrehozást. A funkció öröklődéséből CObject származó összes osztály.
A futásidejű osztályadatokhoz való hozzáférés lehetővé teszi az objektumok osztályára vonatkozó információk futásidőben történő meghatározását. Az objektum osztályának futásidőben történő meghatározására akkor van szükség, ha a függvényargumentumok további típusellenőrzésére van szükség, és amikor speciális célú kódot kell írnia egy objektum osztálya alapján. A futásidejű osztály adatait közvetlenül a C++ nyelv nem támogatja.
A szerializálás egy objektum tartalmának fájlba vagy fájlból történő írására vagy olvasására vonatkozó folyamat. Szerializálással az alkalmazás elhagyása után is tárolhatja az objektum tartalmát. Az objektum ezután olvasható a fájlból, amikor az alkalmazás újraindul. Az ilyen adatobjektumok "állandónak" minősülnek.
A dinamikus objektumlétrehozás lehetővé teszi egy adott osztály objektumának létrehozását futásidőben. A dokumentum-, nézet- és keretobjektumoknak például támogatniuk kell a dinamikus létrehozást, mert a keretrendszernek dinamikusan kell létrehoznia őket.
Az alábbi táblázat felsorolja azokat az MFC-makrókat, amelyek támogatják a futásidejű osztályinformációkat, a szerializálást és a dinamikus létrehozást.
A futásidejű objektumszolgáltatásokról és a szerializálásról további információt az Osztály: Run-Time osztályadatok elérése című cikkbenCObject talál.
Run-Time Object Model Services-makrók
| Név | Description |
|---|---|
DECLARE_DYNAMIC |
Engedélyezi a futásidejű osztályinformációk elérését (az osztálydeklarációban kell használni). |
DECLARE_DYNCREATE |
Lehetővé teszi a dinamikus létrehozást és a futásidejű osztályinformációk elérését (az osztálydeklarációban kell használni). |
DECLARE_SERIAL |
Lehetővé teszi a szerializálást és a futásidejű osztályinformációk elérését (az osztálydeklarációban kell használni). |
IMPLEMENT_DYNAMIC |
Engedélyezi a futásidejű osztályinformációk elérését (az osztály implementációjában kell használni). |
IMPLEMENT_DYNCREATE |
Lehetővé teszi a dinamikus létrehozást és a futásidejű információk elérését (az osztály implementációjában kell használni). |
IMPLEMENT_SERIAL |
Engedélyezi a szerializálást és a futásidejű osztály információinak elérését (az osztály implementációjában kell használni). |
RUNTIME_CLASS |
CRuntimeClass A névvel ellátott osztálynak megfelelő struktúrát adja vissza. |
Az OLE-hez gyakran szükség van az objektumok futási időben történő dinamikus létrehozására. Egy OLE-kiszolgálóalkalmazásnak például képesnek kell lennie dinamikusan létrehozni OLE-elemeket egy ügyfél kérésére válaszul. Hasonlóképpen, az automatizálási kiszolgálónak képesnek kell lennie elemek létrehozására az automatizálási ügyfelektől érkező kérésekre válaszul.
A Microsoft Foundation osztálykönyvtára két, az OLE-ra jellemző makrót biztosít.
OLE-objektumok dinamikus létrehozása
| Név | Description |
|---|---|
AFX_COMCTL32_IF_EXISTS |
Meghatározza, hogy a Common Controls-kódtár implementálja-e a megadott API-t. |
AFX_COMCTL32_IF_EXISTS2 |
Meghatározza, hogy a Common Controls-kódtár implementálja-e a megadott API-t. |
DECLARE_OLECREATE |
Lehetővé teszi az objektumok OLE-automatizálással történő létrehozását. |
DECLARE_OLECTLTYPE |
Deklarálja a GetUserTypeNameID vezérlőosztály és GetMiscStatus a tagfüggvényeket. |
DECLARE_PROPPAGEIDS |
Deklarálja, hogy az OLE-vezérlő a tulajdonságok megjelenítéséhez megadja a tulajdonságlapok listáját. |
IMPLEMENT_OLECREATE |
Lehetővé teszi, hogy az OLE rendszer objektumokat hoz létre. |
IMPLEMENT_OLECTLTYPE |
Implementálja a vezérlőosztály és GetMiscStatus a GetUserTypeNameID tagfüggvényeket. |
IMPLEMENT_OLECREATE_FLAGS |
Ezt a makrót vagy IMPLEMENT_OLECREATE meg kell jelennie a implementációs fájlban minden olyan osztályhoz, amely használja DECLARE_OLECREATE. |
AFX_COMCTL32_IF_EXISTS
Meghatározza, hogy a Common Controls-kódtár implementálja-e a megadott API-t.
Szemantika
AFX_COMCTL32_IF_EXISTS( proc );
Paraméterek
proc
Mutasson a függvény nevét tartalmazó null értékű sztringre, vagy adja meg a függvény sorszámát. Ha ez a paraméter egy sorszámérték, akkor az alacsony sorrendű szónak kell lennie; a magasrendű szónak nullának kell lennie. Ennek a paraméternek Unicode-ban kell lennie.
Megjegyzések
Ezzel a makróval állapíthatja meg, hogy a Common Controls kódtár a függvényt proc adja-e meg (hívás GetProcAddresshelyett).
Requirements
afxcomctl32.h, afxcomctl32.inl
AFX_COMCTL32_IF_EXISTS2
Meghatározza, hogy a Common Controls kódtár implementálja-e a megadott API-t (ez a Unicode verziója AFX_COMCTL32_IF_EXISTS).
Szemantika
AFX_COMCTL32_IF_EXISTS2( proc );
Paraméterek
proc
Mutasson a függvény nevét tartalmazó null értékű sztringre, vagy adja meg a függvény sorszámát. Ha ez a paraméter egy sorszámérték, akkor az alacsony sorrendű szónak kell lennie; a magasrendű szónak nullának kell lennie. Ennek a paraméternek Unicode-ban kell lennie.
Megjegyzések
Ezzel a makróval állapíthatja meg, hogy a Common Controls kódtár a függvényt proc adja-e meg (hívás GetProcAddresshelyett). Ez a makró a Unicode verziója AFX_COMCTL32_IF_EXISTS.
Requirements
afxcomctl32.h, afxcomctl32.inl
DECLARE_DYNAMIC
Lehetővé teszi az objektum osztályának futásidejű információinak elérését az osztály származtatásakor CObject.
DECLARE_DYNAMIC(class_name)
Paraméterek
class_name
Az osztály tényleges neve.
Megjegyzések
Adja hozzá a DECLARE_DYNAMIC makrót az osztály fejlécmodulja (.h) modulhoz, majd foglalja bele a modult minden .cpp olyan modulba, amelyhez hozzá kell férnie az osztály objektumaihoz.
Ha a leírt módon használja a makrókat és a DECLARE_DYNAMIC makrókat, RUNTIME_CLASS a makróval és a CObject::IsKindOf függvénnyel meghatározhatja az objektumok osztályát futásidőbenIMPLEMENT_DYNAMIC.
Ha DECLARE_DYNAMIC szerepel az osztálydeklarációban, akkor IMPLEMENT_DYNAMIC szerepelnie kell az osztály implementációjában.
A makróval kapcsolatos további információkért tekintse meg CObject azDECLARE_DYNAMIC Osztálytémakörök című témakört.
Example
Lásd a példát a IMPLEMENT_DYNAMIC.
Requirements
Fejléc:afx.h
DECLARE_DYNCREATE
Lehetővé teszi a származtatott osztályok objektumainak CObjectdinamikus létrehozását futásidőben.
DECLARE_DYNCREATE(class_name)
Paraméterek
class_name
Az osztály tényleges neve.
Megjegyzések
A keretrendszer ezzel a képességgel dinamikusan hoz létre új objektumokat. Például egy új dokumentum megnyitásakor létrehozott új nézet. A dokumentum-, nézet- és keretosztályok támogatják a dinamikus létrehozást, mert a keretrendszernek dinamikusan kell létrehoznia őket.
Adja hozzá a DECLARE_DYNCREATE makrót az .h osztály moduljában, majd vegye fel a modult az összes .cpp olyan modulba, amelyhez hozzá kell férnie az osztály objektumaihoz.
Ha DECLARE_DYNCREATE szerepel az osztálydeklarációban, akkor IMPLEMENT_DYNCREATE szerepelnie kell az osztály implementációjában.
A makróval kapcsolatos további információkért tekintse meg CObject azDECLARE_DYNCREATE Osztálytémakörök című témakört.
Megjegyzés:
A DECLARE_DYNCREATE makró az összes funkciót DECLARE_DYNAMICtartalmazza.
Example
Lásd a példát a IMPLEMENT_DYNCREATE.
Requirements
Fejléc:afx.h
DECLARE_OLECTLTYPE
Deklarálja a GetUserTypeNameID vezérlőosztály és GetMiscStatus a tagfüggvényeket.
Szemantika
DECLARE_OLECTLTYPE( class_name )
Paraméterek
class_name
A vezérlőosztály neve.
Megjegyzések
GetUserTypeNameIDés GetMiscStatus tiszta virtuális függvények, deklarálva.COleControl Mivel ezek a függvények tiszta virtuálisak, felül kell őket bírálni a vezérlőosztályban.
DECLARE_OLECTLTYPEEmellett hozzá kell adnia a makrót a IMPLEMENT_OLECTLTYPE vezérlőosztály deklarációjához.
Requirements
Fejléc:afxctl.h
DECLARE_PROPPAGEIDS
Deklarálja, hogy az OLE-vezérlő a tulajdonságok megjelenítéséhez megadja a tulajdonságlapok listáját.
Szemantika
DECLARE_PROPPAGEIDS( class_name )
Paraméterek
class_name
Annak a vezérlőosztálynak a neve, amely a tulajdonságlapokat birtokolja.
Megjegyzések
Használja a makrót DECLARE_PROPPAGEIDS az osztálydeklaráció végén. Ezután az .cpp osztály tagfüggvényeit meghatározó fájlban használja a makrót, a BEGIN_PROPPAGEIDS vezérlőelem minden tulajdonságlapjának makróbejegyzéseit, a makrót END_PROPPAGEIDS pedig a tulajdonságlaplista végének deklarálásához.
A tulajdonságoldalakról további információt az ActiveX-vezérlők: Tulajdonságlapok című cikkben talál.
Requirements
Fejléc:afxctl.h
DECLARE_SERIAL
Létrehozza a szerializálható -származtatott osztályhoz CObjectszükséges C++ fejléckódot.
DECLARE_SERIAL(class_name)
Paraméterek
class_name
Az osztály tényleges neve.
Megjegyzések
A szerializálás egy objektum tartalmának fájlba vagy fájlból történő írására vagy olvasására vonatkozó folyamat.
Használja a DECLARE_SERIAL makrót egy .h modulban, majd foglalja bele a modult minden .cpp olyan modulba, amelyhez hozzá kell férnie az osztály objektumaihoz.
Ha DECLARE_SERIAL szerepel az osztálydeklarációban, akkor IMPLEMENT_SERIAL szerepelnie kell az osztály implementációjában.
A DECLARE_SERIAL makró tartalmazza az és DECLARE_DYNCREATEa DECLARE_DYNAMIC .
A makróval AFX_API automatikusan exportálhatja a kinyerési operátort azokat CArchive az osztályokat, amelyek a makrókat és IMPLEMENT_SERIAL a DECLARE_SERIAL makrókat használják. A következő kóddal szögelje be az osztálydeklarációkat (a .h fájlban található):
#undef AFX_API
#define AFX_API AFX_EXT_CLASS
// <your class declarations here>
#undef AFX_API
#define AFX_API
A makróval kapcsolatos további információkért tekintse meg CObject azDECLARE_SERIAL Osztálytémakörök című témakört.
Example
class CAge : public CObject
{
public:
void Serialize(CArchive& ar);
DECLARE_SERIAL(CAge)
// remainder of class declaration omitted
Requirements
Fejléc:afx.h
IMPLEMENT_DYNAMIC
Létrehozza a dinamikus CObjectszármaztatott osztályhoz szükséges C++ kódot, amely futásidejű hozzáféréssel rendelkezik az osztály nevéhez és pozíciójához a hierarchiában.
IMPLEMENT_DYNAMIC(class_name, base_class_name)
Paraméterek
class_name
Az osztály tényleges neve.
base_class_name
Az alaposztály neve.
Megjegyzések
Használja a IMPLEMENT_DYNAMIC makrót egy .cpp modulban, majd csatolja az eredményként kapott objektumkódot csak egyszer.
További információ: CObject Osztálytémakörök.
Example
class CPerson : public CObject
{
DECLARE_DYNAMIC(CPerson)
// other declarations
};
IMPLEMENT_DYNAMIC(CPerson, CObject)
Requirements
Fejléc:afx.h
IMPLEMENT_DYNCREATE
Lehetővé teszi a származtatott osztályok objektumainak CObjectdinamikus létrehozását futásidőben, amikor a DECLARE_DYNCREATE makróval használják.
IMPLEMENT_DYNCREATE(class_name, base_class_name)
Paraméterek
class_name
Az osztály tényleges neve.
base_class_name
Az alaposztály tényleges neve.
Megjegyzések
A keretrendszer ezzel a képességgel dinamikusan hoz létre új objektumokat, például amikor egy objektumot olvas a lemezről a szerializálás során. Adja hozzá a makrót IMPLEMENT_DYNCREATE az osztály implementálási fájljában. További információ: CObject Osztálytémakörök.
Ha a makrókat és IMPLEMENT_DYNCREATE a DECLARE_DYNCREATE makrókat használja, a makró és a RUNTIME_CLASSCObject::IsKindOf tagfüggvény használatával meghatározhatja az objektumok osztályát futásidőben.
Ha DECLARE_DYNCREATE szerepel az osztálydeklarációban, akkor IMPLEMENT_DYNCREATE szerepelnie kell az osztály implementációjában.
Vegye figyelembe, hogy ez a makródefiníció meghívja az osztály alapértelmezett konstruktorát. Ha az osztály explicit módon implementál egy nem triviális konstruktort, az alapértelmezett konstruktort is explicit módon kell implementálnia. Az alapértelmezett konstruktor hozzáadható az osztály private vagy protected tagszakaszaihoz, hogy ne lehessen meghívni az osztály implementációján kívülről.
Example
class CMyDynCreateObj : public CObject
{
int m_Num;
public:
DECLARE_DYNCREATE(CMyDynCreateObj)
CMyDynCreateObj(int Num) { m_Num = Num; }
private:
CMyDynCreateObj() { m_Num = 0; } // provide default constructor only for
// dynamic creation
};
IMPLEMENT_DYNCREATE(CMyDynCreateObj, CObject)
Requirements
Fejléc:afx.h
IMPLEMENT_OLECREATE_FLAGS
Ezt a makrót vagy IMPLEMENT_OLECREATE meg kell jelennie a implementációs fájlban minden olyan osztályhoz, amely használja DECLARE_OLECREATE.
Szemantika
IMPLEMENT_OLECREATE_FLAGS( class_name, external_name, nFlags,
l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)
Paraméterek
class_name
Az osztály tényleges neve.
external_name
A más alkalmazások számára közzétett objektumnév (idézőjelek közé zárva).
nFlags
Az alábbi jelölők közül legalább egyet tartalmaz:
-
afxRegInsertableLehetővé teszi, hogy a vezérlő megjelenjen az OLE-objektumok Objektum beszúrása párbeszédpanelén. -
afxRegApartmentThreadingA beállításjegyzékben lévő szálmodell beállítása a következőreThreadingModel=Apartment: . -
afxRegFreeThreadingA beállításjegyzékben lévő szálmodell beállítása a következőreThreadingModel=Free: .
Kombinálhatja a két jelzőt, és afxRegApartmentThreading beállíthatja afxRegFreeThreading a ThreadingModel=Both értéket. A menetmodell-regisztrációval kapcsolatos további információkért lásd InprocServer32 a Windows SDK-ban.
l, w1, w2, b1, b2b3, b4, b5, b6, , b7az b8 osztály CLSID-jének összetevői.
Megjegyzések
Megjegyzés:
Ha használja IMPLEMENT_OLECREATE_FLAGS, megadhatja, hogy az objektum melyik szálmodellt támogatja a nFlags paraméterrel. Ha csak az egyszálas modellt szeretné támogatni, használja a következőt IMPLEMENT_OLECREATE: .
A külső név a más alkalmazások számára elérhető azonosító. Az ügyfélalkalmazások a külső név használatával kérik le ennek az osztálynak az objektumát egy automatizálási kiszolgálóról.
Az OLE osztályazonosító az objektum egyedi 128 bites azonosítója. Ez egylong, két ****s és nyolc **BYTEWORD**s, ahogy azt la , w1, w2és b1 a szintaxis leírásában is meg lehet jelennib8. Az alkalmazásvarázsló és a kódvarázslók szükség szerint egyedi OLE osztályazonosítókat hoznak létre.
Requirements
Fejléc:afxdisp.h
IMPLEMENT_OLECTLTYPE
Implementálja a vezérlőosztály és GetMiscStatus a GetUserTypeNameID tagfüggvényeket.
Szemantika
DECLARE_OLECTLTYPE( class_name, idsUserTypeName, dwOleMisc )
Paraméterek
class_name
A vezérlőosztály neve.
idsUserTypeName
A vezérlőelem külső nevét tartalmazó sztring erőforrás-azonosítója.
dwOleMisc
Egy vagy több jelölőt tartalmazó enumerálás. Az enumerálásról további információt a Windows SDK-ban talál OLEMISC .
Megjegyzések
IMPLEMENT_OLECTLTYPEEmellett hozzá kell adnia a makrót a DECLARE_OLECTLTYPE vezérlőosztály deklarációjához.
A GetUserTypeNameID tagfüggvény visszaadja a vezérlőosztályt azonosító erőforrás-sztringet.
GetMiscStatus A OLEMISC vezérlőelem bitjeinek visszaadása. Ez az enumerálás a vezérlőelem egyéb jellemzőit leíró beállítások gyűjteményét adja meg. A beállítások teljes leírását OLEMISC a Windows SDK-ban talál OLEMISC .
Megjegyzés:
Az ActiveX ControlWizard által használt alapértelmezett beállítások a következők: OLEMISC_ACTIVATEWHENVISIBLE, OLEMISC_SETCLIENTSITEFIRST, OLEMISC_INSIDEOUT, OLEMISC_CANTLINKINSIDEés OLEMISC_RECOMPOSEONRESIZE.
Requirements
Fejléc:afxctl.h
IMPLEMENT_SERIAL
Létrehozza a dinamikus CObjectszármaztatott osztályhoz szükséges C++ kódot, amely futásidejű hozzáféréssel rendelkezik az osztály nevéhez és pozíciójához a hierarchiában.
IMPLEMENT_SERIAL(class_name, base_class_name, wSchema)
Paraméterek
class_name
Az osztály tényleges neve.
base_class_name
Az alaposztály neve.
wSchema
Az archívumban kódolt UINT -verziószám, amely lehetővé teszi a deszerializáló program számára a korábbi programverziók által létrehozott adatok azonosítását és kezelését. Az osztályséma száma nem lehet -1.
Megjegyzések
Használja a IMPLEMENT_SERIAL makrót egy .cpp modulban, majd csatolja az eredményként kapott objektumkódot csak egyszer.
A makróval AFX_API automatikusan exportálhatja a kinyerési operátort azokat CArchive az osztályokat, amelyek a makrókat és IMPLEMENT_SERIAL a DECLARE_SERIAL makrókat használják. A következő kóddal szögelje be az osztálydeklarációkat (a .h fájlban található):
#undef AFX_API
#define AFX_API AFX_EXT_CLASS
// <your class declarations here>
#undef AFX_API
#define AFX_API
További információ: OsztálytémakörökCObject.
Example
IMPLEMENT_SERIAL(CAge, CObject, VERSIONABLE_SCHEMA | 2)
Requirements
Fejléc:afx.h
RUNTIME_CLASS
Lekéri a futásidejű osztály struktúráját egy C++ osztály nevéből.
RUNTIME_CLASS(class_name)
Paraméterek
class_name
Az osztály tényleges neve (nem idézőjelek közé zárva).
Megjegyzések
RUNTIME_CLASS egy mutatót ad vissza a CRuntimeClass megadott class_nameosztály szerkezetéhez. Csak CObject-származtatott osztályok deklarálva DECLARE_DYNAMIC, DECLARE_DYNCREATEvagy DECLARE_SERIAL mutatókat ad vissza egy CRuntimeClass struktúrához.
További információ: CObject Osztálytémakörök.
Example
CRuntimeClass* prt = RUNTIME_CLASS(CAge);
ASSERT(strcmp(prt->m_lpszClassName, "CAge") == 0);
Requirements
Fejléc:afx.h
DECLARE_OLECREATE
Lehetővé teszi a származtatott osztályok objektumainak CCmdTargetlétrehozását az OLE automatizálással.
DECLARE_OLECREATE(class_name)
Paraméterek
class_name
Az osztály tényleges neve.
Megjegyzések
Ez a makró lehetővé teszi, hogy más OLE-kompatibilis alkalmazások ilyen típusú objektumokat hozzanak létre.
Adja hozzá a DECLARE_OLECREATE makrót az .h osztály moduljában, majd foglalja bele a modult minden .cpp olyan modulba, amelyhez hozzá kell férnie az osztály objektumaihoz.
Ha DECLARE_OLECREATE szerepel az osztálydeklarációban, akkor IMPLEMENT_OLECREATE szerepelnie kell az osztály implementációjában. Az osztálydeklarációt is DECLARE_OLECREATE használni DECLARE_DYNCREATE kell vagy DECLARE_SERIAL.
Requirements
Fejléc: afxdisp.h
IMPLEMENT_OLECREATE
Ezt a makrót vagy IMPLEMENT_OLECREATE_FLAGS meg kell jelennie a implementációs fájlban minden olyan osztályhoz, amely használja DECLARE_OLECREATE.
IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)
Paraméterek
class_name
Az osztály tényleges neve.
external_name
A más alkalmazások számára közzétett objektumnév (idézőjelek közé zárva).
l, w1, w2, b1, b2b3, b4, b5, b6, , b7az b8 osztály CLSID-jének összetevői.
Megjegyzések
Megjegyzés:
Ha ezt használja IMPLEMENT_OLECREATE, alapértelmezés szerint csak az egyszálas modellt támogatja. Ha használja IMPLEMENT_OLECREATE_FLAGS, megadhatja, hogy az objektum melyik szálmodellt támogatja a nFlags paraméterrel.
A külső név a más alkalmazások számára elérhető azonosító. Az ügyfélalkalmazások a külső név használatával kérik le ennek az osztálynak az objektumát egy automatizálási kiszolgálóról.
Az OLE osztályazonosító az objektum egyedi 128 bites azonosítója. Ez egylong, két ****s és nyolc **BYTEWORD**s, ahogy azt la , w1, w2és b1 a szintaxis leírásában is meg lehet jelennib8. Az alkalmazásvarázsló és a kódvarázslók szükség szerint egyedi OLE osztályazonosítókat hoznak létre.
Requirements
Fejléc: afxdisp.h
Lásd még
Makrók és globális változók
Az MFC Közös vezérlők kódtárának elkülönítése
CLSID-kulcs