Objektmodelldienste zur Laufzeit
Die Klassen CObject
und CRuntimeClass
Kapseln mehrerer Objektdienste, einschließlich des Zugriffs auf Laufzeitklasseninformationen, Serialisierung und dynamische Objekterstellung. Alle von dieser Funktionalität abgeleiteten CObject
Klassen erben.
Der Zugriff auf Laufzeitklasseninformationen ermöglicht es Ihnen, Informationen zur Laufzeit der Klasse eines Objekts zu ermitteln. Die Möglichkeit, die Klasse eines Objekts zur Laufzeit zu ermitteln, ist nützlich, wenn Sie eine zusätzliche Typüberprüfung von Funktionsargumenten benötigen und wenn Sie speziellen Code basierend auf der Klasse eines Objekts schreiben müssen. Laufzeitklasseninformationen werden nicht direkt von der C++-Sprache unterstützt.
Serialisierung ist der Prozess des Schreibens oder Lesens des Inhalts eines Objekts in oder aus einer Datei. Sie können die Serialisierung verwenden, um den Inhalt eines Objekts zu speichern, auch nachdem die Anwendung beendet wurde. Das Objekt kann dann aus der Datei gelesen werden, wenn die Anwendung neu gestartet wird. Solche Datenobjekte werden als "persistent" bezeichnet.
Mit der erstellung dynamischer Objekte können Sie zur Laufzeit ein Objekt einer angegebenen Klasse erstellen. Beispielsweise müssen Dokument-, Ansichts- und Frameobjekte die dynamische Erstellung unterstützen, da das Framework sie dynamisch erstellen muss.
In der folgenden Tabelle sind die MFC-Makros aufgeführt, die Laufzeitklasseninformationen, Serialisierung und dynamische Erstellung unterstützen.
Weitere Informationen zu diesen Laufzeitobjektdiensten und zur Serialisierung finden Sie im Artikel CObject
Klasse: Zugreifen auf Laufzeitklasseninformationen.
Laufzeitobjektmodelldienste-Makros
Name | Beschreibung |
---|---|
DECLARE_DYNAMIC |
Ermöglicht den Zugriff auf Laufzeitklasseninformationen (muss in der Klassendeklaration verwendet werden). |
DECLARE_DYNCREATE |
Ermöglicht die dynamische Erstellung und den Zugriff auf Laufzeitklasseninformationen (muss in der Klassendeklaration verwendet werden). |
DECLARE_SERIAL |
Ermöglicht die Serialisierung und den Zugriff auf Laufzeitklasseninformationen (muss in der Klassendeklaration verwendet werden). |
IMPLEMENT_DYNAMIC |
Ermöglicht den Zugriff auf Laufzeitklasseninformationen (muss in der Klassenimplementierung verwendet werden). |
IMPLEMENT_DYNCREATE |
Ermöglicht die dynamische Erstellung und den Zugriff auf Laufzeitinformationen (muss in der Klassenimplementierung verwendet werden). |
IMPLEMENT_SERIAL |
Ermöglicht serialisierung und Zugriff auf Laufzeitklasseninformationen (muss in der Klassenimplementierung verwendet werden). |
RUNTIME_CLASS |
Gibt die CRuntimeClass Struktur zurück, die der benannten Klasse entspricht. |
OLE erfordert häufig die dynamische Erstellung von Objekten zur Laufzeit. Beispielsweise muss eine OLE-Serveranwendung in der Lage sein, OLE-Elemente dynamisch als Reaktion auf eine Anforderung von einem Client zu erstellen. Ebenso muss ein Automatisierungsserver in der Lage sein, Elemente als Reaktion auf Anforderungen von Automatisierungsclients zu erstellen.
Die Microsoft Foundation-Klassenbibliothek bietet zwei für OLE spezifische Makros.
Dynamische Erstellung von OLE-Objekten
Name | Beschreibung |
---|---|
AFX_COMCTL32_IF_EXISTS |
Bestimmt, ob die Bibliothek für allgemeine Steuerelemente die angegebene API implementiert. |
AFX_COMCTL32_IF_EXISTS2 |
Bestimmt, ob die Bibliothek für allgemeine Steuerelemente die angegebene API implementiert. |
DECLARE_OLECREATE |
Ermöglicht das Erstellen von Objekten über die OLE-Automatisierung. |
DECLARE_OLECTLTYPE |
Deklariert die GetUserTypeNameID Funktionen und GetMiscStatus Memberfunktionen Ihrer Steuerelementklasse. |
DECLARE_PROPPAGEIDS |
Deklariert, dass das OLE-Steuerelement eine Liste von Eigenschaftenseiten zum Anzeigen seiner Eigenschaften bereitstellt. |
IMPLEMENT_OLECREATE |
Ermöglicht das Erstellen von Objekten durch das OLE-System. |
IMPLEMENT_OLECTLTYPE |
Implementiert die GetUserTypeNameID Funktionen und GetMiscStatus Memberfunktionen Ihrer Steuerelementklasse. |
IMPLEMENT_OLECREATE_FLAGS |
Entweder dieses Makro oder IMPLEMENT_OLECREATE muss in der Implementierungsdatei für jede Klasse angezeigt werden, die verwendet wird DECLARE_OLECREATE . |
AFX_COMCTL32_IF_EXISTS
Bestimmt, ob die Bibliothek für allgemeine Steuerelemente die angegebene API implementiert.
Syntax
AFX_COMCTL32_IF_EXISTS( proc );
Parameter
proc
Zeigen Sie auf eine mit Null beendete Zeichenfolge, die den Funktionsnamen enthält, oder gibt den Ordnungswert der Funktion an. Wenn dieser Parameter ein Ordnungswert ist, muss er sich im Wort mit niedriger Reihenfolge befindet. Das Wort "Hochreihenfolge" muss null sein. Dieser Parameter muss in Unicode enthalten sein.
Hinweise
Verwenden Sie dieses Makro, um zu bestimmen, ob die von der Funktion angegebene Funktion (anstelle des AufrufensGetProcAddress
) von der Allgemeinen Steuerelementbibliothek bestimmt proc
wird.
Anforderungen
afxcomctl32.h
, afxcomctl32.inl
AFX_COMCTL32_IF_EXISTS2
Bestimmt, ob die Bibliothek für allgemeine Steuerelemente die angegebene API implementiert (dies ist die Unicode-Version von AFX_COMCTL32_IF_EXISTS
).
Syntax
AFX_COMCTL32_IF_EXISTS2( proc );
Parameter
proc
Zeigen Sie auf eine mit Null beendete Zeichenfolge, die den Funktionsnamen enthält, oder gibt den Ordnungswert der Funktion an. Wenn dieser Parameter ein Ordnungswert ist, muss er sich im Wort mit niedriger Reihenfolge befindet. Das Wort "Hochreihenfolge" muss null sein. Dieser Parameter muss in Unicode enthalten sein.
Hinweise
Verwenden Sie dieses Makro, um zu bestimmen, ob die von der Funktion angegebene Funktion (anstelle des AufrufensGetProcAddress
) von der Allgemeinen Steuerelementbibliothek bestimmt proc
wird. Dieses Makro ist die Unicode-Version von AFX_COMCTL32_IF_EXISTS
.
Anforderungen
afxcomctl32.h
, afxcomctl32.inl
DECLARE_DYNAMIC
Fügt die Möglichkeit hinzu, beim Ableiten einer Klasse von einer Klasse auf Laufzeitinformationen zu einer Objektklasse CObject
zuzugreifen.
DECLARE_DYNAMIC(class_name)
Parameter
class_name
Der tatsächliche Name der Klasse.
Hinweise
Fügen Sie das DECLARE_DYNAMIC
Makro dem Headermodul (.h
) für die Klasse hinzu, und fügen Sie dieses Modul in alle .cpp
Module ein, die Zugriff auf Objekte dieser Klasse benötigen.
Wenn Sie die DECLARE_DYNAMIC
makros IMPLEMENT_DYNAMIC
wie beschrieben verwenden, können Sie das Makro und die CObject::IsKindOf
Funktion verwendenRUNTIME_CLASS
, um die Klasse Ihrer Objekte zur Laufzeit zu bestimmen.
Wenn DECLARE_DYNAMIC
sie in der Klassendeklaration enthalten ist, IMPLEMENT_DYNAMIC
muss sie in die Klassenimplementierung einbezogen werden.
Weitere Informationen zum DECLARE_DYNAMIC
Makro finden Sie unter CObject
"Kursthemen".
Beispiel
Ein Beispiel hierfür finden Sie unter IMPLEMENT_DYNAMIC
.
Anforderungen
Header: afx.h
DECLARE_DYNCREATE
Ermöglicht die dynamische Erstellung von Objekten von CObject
abgeleiteten Klassen zur Laufzeit.
DECLARE_DYNCREATE(class_name)
Parameter
class_name
Der tatsächliche Name der Klasse.
Hinweise
Das Framework verwendet diese Möglichkeit, neue Objekte dynamisch zu erstellen. Beispielsweise die neue Ansicht, die beim Öffnen eines neuen Dokuments erstellt wurde. Dokument-, Ansichts- und Frameklassen sollten die dynamische Erstellung unterstützen, da das Framework sie dynamisch erstellen muss.
Fügen Sie das DECLARE_DYNCREATE
.h
Makro im Modul für die Klasse hinzu, und fügen Sie dieses Modul in alle .cpp
Module ein, die Zugriff auf Objekte dieser Klasse benötigen.
Wenn DECLARE_DYNCREATE
sie in der Klassendeklaration enthalten ist, IMPLEMENT_DYNCREATE
muss sie in die Klassenimplementierung einbezogen werden.
Weitere Informationen zum DECLARE_DYNCREATE
Makro finden Sie unter CObject
"Kursthemen".
Hinweis
Das DECLARE_DYNCREATE
Makro enthält alle Funktionen von DECLARE_DYNAMIC
.
Beispiel
Ein Beispiel hierfür finden Sie unter IMPLEMENT_DYNCREATE
.
Anforderungen
Header: afx.h
DECLARE_OLECTLTYPE
Deklariert die GetUserTypeNameID
Funktionen und GetMiscStatus
Memberfunktionen Ihrer Steuerelementklasse.
Syntax
DECLARE_OLECTLTYPE( class_name )
Parameter
class_name
Der Name der Steuerelementklasse.
Hinweise
GetUserTypeNameID
und GetMiscStatus
sind reine virtuelle Funktionen, die in COleControl
deklariert sind. Da diese Funktionen rein virtuell sind, müssen sie in Ihrer Steuerelementklasse überschrieben werden. Zusätzlich dazu DECLARE_OLECTLTYPE
müssen Sie das IMPLEMENT_OLECTLTYPE
Makro ihrer Steuerelementklassendeklaration hinzufügen.
Anforderungen
Header: afxctl.h
DECLARE_PROPPAGEIDS
Deklariert, dass das OLE-Steuerelement eine Liste von Eigenschaftenseiten zum Anzeigen seiner Eigenschaften bereitstellt.
Syntax
DECLARE_PROPPAGEIDS( class_name )
Parameter
class_name
Der Name der Steuerelementklasse, die die Eigenschaftenseiten besitzt.
Hinweise
Verwenden Sie das DECLARE_PROPPAGEIDS
Makro am Ende der Klassendeklaration. Verwenden Sie dann in der Datei, in der .cpp
die Memberfunktionen für die Klasse definiert sind, das BEGIN_PROPPAGEIDS
Makro, Makroeinträge für die Eigenschaftenseiten des Steuerelements und das END_PROPPAGEIDS
Makro, um das Ende der Eigenschaftenseitenliste zu deklarieren.
Weitere Informationen zu Eigenschaftenseiten finden Sie im Artikel ActiveX-Steuerelemente: Eigenschaftenseiten.
Anforderungen
Header: afxctl.h
DECLARE_SERIAL
Generiert den C++-Headercode, der für eine CObject
abgeleitete Klasse erforderlich ist, die serialisiert werden kann.
DECLARE_SERIAL(class_name)
Parameter
class_name
Der tatsächliche Name der Klasse.
Hinweise
Serialisierung ist der Prozess des Schreibens oder Lesens des Inhalts eines Objekts in und aus einer Datei.
Verwenden Sie das DECLARE_SERIAL
Makro in einem .h
Modul, und fügen Sie dieses Modul dann in alle .cpp
Module ein, die Zugriff auf Objekte dieser Klasse benötigen.
Wenn DECLARE_SERIAL
sie in der Klassendeklaration enthalten ist, IMPLEMENT_SERIAL
muss sie in die Klassenimplementierung einbezogen werden.
Das DECLARE_SERIAL
Makro enthält alle Funktionen von DECLARE_DYNAMIC
und DECLARE_DYNCREATE
.
Sie können das AFX_API
Makro verwenden, um den CArchive
Extraktionsoperator automatisch für Klassen zu exportieren, die die DECLARE_SERIAL
Makros IMPLEMENT_SERIAL
verwenden. Klammern Sie die Klassendeklarationen (in der .h
Datei) mit dem folgenden Code:
#undef AFX_API
#define AFX_API AFX_EXT_CLASS
// <your class declarations here>
#undef AFX_API
#define AFX_API
Weitere Informationen zum DECLARE_SERIAL
Makro finden Sie unter CObject
"Kursthemen".
Beispiel
class CAge : public CObject
{
public:
void Serialize(CArchive& ar);
DECLARE_SERIAL(CAge)
// remainder of class declaration omitted
Anforderungen
Header: afx.h
IMPLEMENT_DYNAMIC
Generiert den C++-Code, der für eine dynamische CObject
abgeleitete Klasse mit Laufzeitzugriff auf den Klassennamen und die Position innerhalb der Hierarchie erforderlich ist.
IMPLEMENT_DYNAMIC(class_name, base_class_name)
Parameter
class_name
Der tatsächliche Name der Klasse.
base_class_name
Der Name der Basisklasse.
Hinweise
Verwenden Sie das IMPLEMENT_DYNAMIC
Makro in einem .cpp
Modul, und verknüpfen Sie dann den resultierenden Objektcode nur einmal.
Weitere Informationen finden Sie unter CObject
"Kursthemen".
Beispiel
class CPerson : public CObject
{
DECLARE_DYNAMIC(CPerson)
// other declarations
};
IMPLEMENT_DYNAMIC(CPerson, CObject)
Anforderungen
Header: afx.h
IMPLEMENT_DYNCREATE
Ermöglicht die dynamische Erstellung von Objekten von CObject
abgeleiteten Klassen zur Laufzeit, wenn sie mit dem DECLARE_DYNCREATE
Makro verwendet wird.
IMPLEMENT_DYNCREATE(class_name, base_class_name)
Parameter
class_name
Der tatsächliche Name der Klasse.
base_class_name
Der tatsächliche Name der Basisklasse.
Hinweise
Das Framework verwendet diese Möglichkeit, um neue Objekte dynamisch zu erstellen, z. B. wenn ein Objekt während der Serialisierung vom Datenträger gelesen wird. Fügen Sie das IMPLEMENT_DYNCREATE
Makro in der Klassenimplementierungsdatei hinzu. Weitere Informationen finden Sie unter CObject
"Kursthemen".
Wenn Sie die DECLARE_DYNCREATE
IMPLEMENT_DYNCREATE
Makros und Makros verwenden, können Sie das Makro und die CObject::IsKindOf
Memberfunktion verwendenRUNTIME_CLASS
, um die Klasse Ihrer Objekte zur Laufzeit zu bestimmen.
Wenn DECLARE_DYNCREATE
sie in der Klassendeklaration enthalten ist, IMPLEMENT_DYNCREATE
muss sie in die Klassenimplementierung einbezogen werden.
Beachten Sie, dass diese Makrodefinition den Standardkonstruktor für Ihre Klasse aufruft. Wenn ein nicht trivialer Konstruktor explizit von der Klasse implementiert wird, muss er auch explizit den Standardkonstruktor implementieren. Der Standardkonstruktor kann den Abschnitten der Klasse private
oder protected
Member hinzugefügt werden, um zu verhindern, dass er außerhalb der Klassenimplementierung aufgerufen wird.
Beispiel
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)
Anforderungen
Header: afx.h
IMPLEMENT_OLECREATE_FLAGS
Entweder dieses Makro oder IMPLEMENT_OLECREATE
muss in der Implementierungsdatei für jede Klasse angezeigt werden, die verwendet wird DECLARE_OLECREATE
.
Syntax
IMPLEMENT_OLECREATE_FLAGS( class_name, external_name, nFlags,
l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)
Parameter
class_name
Der tatsächliche Name der Klasse.
external_name
Der Objektname, der für andere Anwendungen verfügbar gemacht wird (in Anführungszeichen eingeschlossen).
nFlags
Enthält ein oder mehrere der folgenden Flags:
afxRegInsertable
Ermöglicht das Anzeigen des Steuerelements im Dialogfeld "Objekt einfügen" für OLE-Objekte.afxRegApartmentThreading
Legt das Threadingmodell in der Registrierung aufThreadingModel=Apartment
.afxRegFreeThreading
Legt das Threadingmodell in der Registrierung aufThreadingModel=Free
.
Sie können die beiden Flags afxRegApartmentThreading
kombinieren und afxRegFreeThreading
ThreadingModel=Both festlegen. Weitere Informationen zur Threadingmodellregistrierung finden Sie InprocServer32
im Windows SDK.
l
, w1
, , w2
, b2
b1
, b3
b4
, , b5
, b6
, , b7
Komponenten b8
der CLSID der Klasse.
Hinweise
Hinweis
Wenn Sie verwenden IMPLEMENT_OLECREATE_FLAGS
, können Sie angeben, welches Threadingmodell Ihr Objekt unterstützt, indem Sie den nFlags
Parameter verwenden. Wenn Sie nur das Einzellaufmodell unterstützen möchten, verwenden Sie IMPLEMENT_OLECREATE
.
Der externe Name ist der Bezeichner, der für andere Anwendungen verfügbar gemacht wird. Clientanwendungen verwenden den externen Namen, um ein Objekt dieser Klasse von einem Automatisierungsserver anzufordern.
Die OLE-Klassen-ID ist ein eindeutiger 128-Bit-Bezeichner für das Objekt. Es besteht aus einem , zwei long
**WORD
**s und acht **BYTE
**s, wie dargestellt durch l
, w1
, , w2
und b1
durch b8
die Syntaxbeschreibung. Der Anwendungs-Assistent und Code-Assistenten erstellen eindeutige OLE-Klassen-IDs für Sie nach Bedarf.
Anforderungen
Header: afxdisp.h
IMPLEMENT_OLECTLTYPE
Implementiert die GetUserTypeNameID
Funktionen und GetMiscStatus
Memberfunktionen Ihrer Steuerelementklasse.
Syntax
DECLARE_OLECTLTYPE( class_name, idsUserTypeName, dwOleMisc )
Parameter
class_name
Der Name der Steuerelementklasse.
idsUserTypeName
Die Ressourcen-ID einer Zeichenfolge, die den externen Namen des Steuerelements enthält.
dwOleMisc
Eine Aufzählung, die mindestens ein Flag enthält. Weitere Informationen zu dieser Enumeration finden Sie im OLEMISC
Windows SDK.
Hinweise
Zusätzlich dazu IMPLEMENT_OLECTLTYPE
müssen Sie das DECLARE_OLECTLTYPE
Makro ihrer Steuerelementklassendeklaration hinzufügen.
Die GetUserTypeNameID
Memberfunktion gibt die Ressourcenzeichenfolge zurück, die Die Steuerelementklasse identifiziert. GetMiscStatus
gibt die OLEMISC
Bits für Ihr Steuerelement zurück. Diese Enumeration gibt eine Auflistung von Einstellungen an, die verschiedene Merkmale Ihres Steuerelements beschreiben. Eine vollständige Beschreibung der OLEMISC
Einstellungen finden Sie im OLEMISC
Windows SDK.
Hinweis
Die von ActiveX ControlWizard verwendeten Standardeinstellungen sind: OLEMISC_ACTIVATEWHENVISIBLE
, , OLEMISC_SETCLIENTSITEFIRST
, , OLEMISC_INSIDEOUT
, OLEMISC_CANTLINKINSIDE
und OLEMISC_RECOMPOSEONRESIZE
.
Anforderungen
Header: afxctl.h
IMPLEMENT_SERIAL
Generiert den C++-Code, der für eine dynamische CObject
abgeleitete Klasse mit Laufzeitzugriff auf den Klassennamen und die Position innerhalb der Hierarchie erforderlich ist.
IMPLEMENT_SERIAL(class_name, base_class_name, wSchema)
Parameter
class_name
Der tatsächliche Name der Klasse.
base_class_name
Der Name der Basisklasse.
wSchema
Eine UINT -Versionsnummer, die im Archiv codiert wird, um ein Deserialisierungsprogramm zum Identifizieren und Verarbeiten von Daten zu ermöglichen, die von früheren Programmversionen erstellt wurden. Die Klassenschemanummer darf nicht -1 sein.
Hinweise
Verwenden Sie das IMPLEMENT_SERIAL
Makro in einem .cpp
Modul. Verknüpfen Sie dann den resultierenden Objektcode nur einmal.
Sie können das AFX_API
Makro verwenden, um den CArchive
Extraktionsoperator automatisch für Klassen zu exportieren, die die DECLARE_SERIAL
Makros IMPLEMENT_SERIAL
verwenden. Klammern Sie die Klassendeklarationen (in der .h
Datei) mit dem folgenden Code:
#undef AFX_API
#define AFX_API AFX_EXT_CLASS
// <your class declarations here>
#undef AFX_API
#define AFX_API
Weitere Informationen finden Sie in den CObject
Kursthemen.
Beispiel
IMPLEMENT_SERIAL(CAge, CObject, VERSIONABLE_SCHEMA | 2)
Anforderungen
Header: afx.h
RUNTIME_CLASS
Ruft die Laufzeitklassenstruktur aus dem Namen einer C++-Klasse ab.
RUNTIME_CLASS(class_name)
Parameter
class_name
Der tatsächliche Name der Klasse (nicht in Anführungszeichen eingeschlossen).
Hinweise
RUNTIME_CLASS
gibt einen Zeiger auf eine CRuntimeClass
Struktur für die durch class_name
. Nur CObject
abgeleitete Klassen, die mit DECLARE_DYNAMIC
, DECLARE_DYNCREATE
oder DECLARE_SERIAL
gibt Zeiger auf eine CRuntimeClass
Struktur zurück.
Weitere Informationen finden Sie unter CObject
"Kursthemen".
Beispiel
CRuntimeClass* prt = RUNTIME_CLASS(CAge);
ASSERT(strcmp(prt->m_lpszClassName, "CAge") == 0);
Anforderungen
Header: afx.h
DECLARE_OLECREATE
Ermöglicht das Erstellen von Objekten von CCmdTarget
abgeleiteten Klassen über die OLE-Automatisierung.
DECLARE_OLECREATE(class_name)
Parameter
class_name
Der tatsächliche Name der Klasse.
Hinweise
Mit diesem Makro können andere OLE-fähige Anwendungen Objekte dieses Typs erstellen.
Fügen Sie das DECLARE_OLECREATE
.h
Makro im Modul für die Klasse hinzu, und fügen Sie dieses Modul dann in alle .cpp
Module ein, die Zugriff auf Objekte dieser Klasse benötigen.
Wenn DECLARE_OLECREATE
sie in der Klassendeklaration enthalten ist, IMPLEMENT_OLECREATE
muss sie in die Klassenimplementierung einbezogen werden. Eine Klassendeklaration, die DECLARE_OLECREATE
verwendet wird, muss ebenfalls verwendet DECLARE_DYNCREATE
oder verwendet werden DECLARE_SERIAL
.
Anforderungen
Header: afxdisp.h
IMPLEMENT_OLECREATE
Entweder dieses Makro oder IMPLEMENT_OLECREATE_FLAGS
muss in der Implementierungsdatei für jede Klasse angezeigt werden, die verwendet wird DECLARE_OLECREATE
.
IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)
Parameter
class_name
Der tatsächliche Name der Klasse.
external_name
Der Objektname, der für andere Anwendungen verfügbar gemacht wird (in Anführungszeichen eingeschlossen).
l
, w1
, , w2
, b2
b1
, b3
b4
, , b5
, b6
, , b7
Komponenten b8
der CLSID der Klasse.
Hinweise
Hinweis
Wenn Sie standardmäßig nur das Einzelthreadingmodell verwenden IMPLEMENT_OLECREATE
, unterstützen Sie es. Wenn Sie verwenden IMPLEMENT_OLECREATE_FLAGS
, können Sie angeben, welches Threadingmodell Ihr Objekt unterstützt, indem Sie den nFlags
Parameter verwenden.
Der externe Name ist der Bezeichner, der für andere Anwendungen verfügbar gemacht wird. Clientanwendungen verwenden den externen Namen, um ein Objekt dieser Klasse von einem Automatisierungsserver anzufordern.
Die OLE-Klassen-ID ist ein eindeutiger 128-Bit-Bezeichner für das Objekt. Es besteht aus einem , zwei long
**WORD
**s und acht **BYTE
**s, wie dargestellt durch l
, w1
, , w2
und b1
durch b8
die Syntaxbeschreibung. Der Anwendungs-Assistent und Code-Assistenten erstellen eindeutige OLE-Klassen-IDs für Sie nach Bedarf.
Anforderungen
Header: afxdisp.h
Siehe auch
Makros und Globalen
Isolierung der MFC-Bibliothek für Standardsteuerelemente
CLSID-Schlüssel