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.
 | 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
 | 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
|