5.4. Použití komponent v aplikaci

Vlastní použití komponenty je již relativně snadnou záležitostí. Nejprve musíme inicializovat infrastrukturu COM voláním funkce CoInitialize. Instanci nové komponenty vytvoříme voláním funkce CoCreateInstance, které předáme CLSID třídy implementující komponentu a IID rozhraní, přes které chceme s komponentou komunikovat. V případě úspěšného vytvoření obdržíme ukazatel na požadované rozhraní, který nakonec uvolníme voláním metody Release rozhraní IUnknown.

src/RandomCom/RandomTest.cpp
Příklad 5.3. Testovací aplikace RandomTest.cpp
   #define INITGUID
   #include "IRandom.h"
   #include <iostream>
   using namespace std;
   
   void main(int argc, char** argv)
   {
      // inicializace COM
	   HRESULT hr = CoInitialize(NULL);
	   if (FAILED(hr)) { ... }

      // vytvoření instance komponenty
	   IRandom *pRnd = NULL;
	   hr = CoCreateInstance(CLSID_RandomImpl, NULL, CLSCTX_ALL,
            IID_IRandom, (void **)&pRnd);
	   if (FAILED(hr)) { ... }

      // použití komponenty
	   pRnd->Start(1234);
   	
	   // uvolnění komponenty
	   pRnd->Release();
   	
	   // finalizace COM
	   CoUninitialize();
	}

Definice makra INITGUID způsobí vygenerování inicializovaných proměnných obsahujících GUID ze záhlaví IRandom.h.

Uvedené ukázky v jazyce C++ představují (pokud neuvažujeme dnes již pro tyto účely téměř nepoužívaný jazyk C) z hlediska programátora ten nejobtížnější postup, jak vytvářet a používat COM komponenty v aplikacích. Další programovací jazyky jako Visual Basic nebo C# již poskytují podstatně větší komfort.

V následující ukázce

src/RandomCom/RandomTest.vb
Příklad 5.4. Použití COM komponent v jazyce Visual Basic
Option Explicit On 
Module RandomTest
    Sub Main()
        Dim rnd As RandomLib.IRandom
        Dim val As Integer
        
        rnd = New RandomLib.RandomImpl
        rnd.Start(1234)
        For i As Integer = 0 To 9
            rnd.Next(val)
            Console.WriteLine("{0}: {1}", i, val)
        Next
    End Sub
End Module