Freigeben über


Initialisieren der COM-Bibliothek

Jedes Windows-Programm, das COM verwendet, muss die COM-Bibliothek initialisieren, indem die CoInitializeEx-Funktion aufgerufen wird. Jeder Thread, der eine COM-Schnittstelle verwendet, muss einen separaten Aufruf dieser Funktion ausführen. CoInitializeEx weist die folgende Signatur auf:

HRESULT CoInitializeEx(LPVOID pvReserved, DWORD dwCoInit);

Der erste Parameter ist reserviert und muss NULL sein. Der zweite Parameter gibt das Threadingmodell an, das von Ihrem Programm verwendet wird. COM unterstützt zwei verschiedene Threadingmodelle, Apartmentthread und Multithread. Wenn Sie Apartmentthreading angeben, geben Sie die folgenden Garantien:

  • Sie greifen über einen einzelnen Thread auf jedes COM-Objekt zu; Sie verwenden keine COM-Schnittstellenzeiger zwischen mehreren Threads.
  • Der Thread verfügt über eine Nachrichtenschleife. (Siehe Windows Messages in Modul 1.)

Wenn eine dieser Einschränkungen nicht zutrifft, verwenden Sie das Multithread-Modell. Um das Threading-Modell anzugeben, legen Sie eines der folgenden Flags im dwCoInit-Parameter fest.

Flag Beschreibung
COINIT_APARTMENTTHREADED Apartmentthread.
COINIT_MULTITHREADED Multithread.

 

Sie müssen genau eines dieser Flags festlegen. Im Allgemeinen sollte ein Thread, der ein Fenster erstellt, das COINIT_APARTMENTTHREADED-Flag und andere Threads COINIT_MULTITHREADED verwenden. Manche COM-Komponenten erfordern jedoch ein bestimmtes Threading-Modell.

Hinweis

Selbst wenn Sie Apartmentthreading angeben, ist es dennoch möglich, Schnittstellen zwischen Threads mithilfe einer Technik gemeinsam zu nutzen, die als Marshalling bezeichnet wird. Dies wird in diesem Modul nicht behandelt. Wichtig dabei ist, dass Sie mit Apartmentthreading niemals einfach einen Schnittstellenzeiger auf einen anderen Thread kopieren müssen. Weitere Informationen zu den COM-Threading-Modellen finden Sie unter Prozesse, Threads und Apartments.)

 

Zusätzlich zu den bereits erwähnten Flags empfiehlt es sich, das COINIT_DISABLE_OLE1DDE-Flag im dwCoInit-Parameter festzulegen. Das Festlegen dieses Flags verhindert zusätzlichen Aufwand im Zusammenhang mit Object Linking and Embedding (OLE) 1.0, einer veralteten Technologie.

So initialisieren Sie COM für das Apartmentthreading:

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);

Der HRESULT-Rückgabetyp enthält einen Fehler- oder Erfolgscode. Mit der COM-Fehlerbehandlung befassen wir uns im nächsten Abschnitt.

Aufheben der Initialisierung der COM-Bibliothek

Für jeden erfolgreichen Aufruf von CoInitializeEx müssen Sie CoUninitialize aufrufen, bevor der Thread beendet wird. Diese Funktion nimmt keine Parameter an und hat keinen Rückgabewert.

CoUninitialize();

Nächste

Fehlercodes in COM