Ik heb een COM server in de vorm van een executable en een COM client in de vorm van een ActiveX component. Het ActiveX component wordt geladen in een webpagina.
De COM server beschikt over 1 COM object genaamd Receiver met een interface genaamd IReceiver. Het COM object heeft o.a. twee member functies genaamd SetParam(int) en GetParam(int*) en een member variabele: int param, die wordt gezet en gelezen door respectievelijk SetParam en GetParam.
In het ActiveX component wordt de COM functie CoCreateInstance aangeroepen en wordt er een pointer naar de IReceiver interface teruggegeven.
Hierna volgt de aanroep van SetParam
Een MessageBox in de SetParam functie geeft de waarde 341 weer. Het aanmaken van het COM object en het aanroepen van member functies is dus geen enkel probleem. Maar wat ik nu zou willen is dat ik in de COM server de volgende aanroep kan doen
zodat ik de waarde, die de client heeft gezet, uit kan lezen in de server.
Als ik in de server ook de CoCreateInstance functie aanroep wordt er een nieuwe (lees: tweede) instantie van het COM object aangemaakt en kan ik wel de GetParam member functie aanroepen maar dan krijg ik natuurlijk niet de waarde terug die SetParam heeft gezet.
Wat moet ik nu doen zodat er maar 1 instantie van het COM object wordt aangemaakt die zowel door de client als door de server kan worden aangesproken?
De COM server beschikt over 1 COM object genaamd Receiver met een interface genaamd IReceiver. Het COM object heeft o.a. twee member functies genaamd SetParam(int) en GetParam(int*) en een member variabele: int param, die wordt gezet en gelezen door respectievelijk SetParam en GetParam.
In het ActiveX component wordt de COM functie CoCreateInstance aangeroepen en wordt er een pointer naar de IReceiver interface teruggegeven.
code:
1
| HRESULT hRes = ::CoCreateInstance(CLSID_Receiver, NULL, CLSCTX_LOCAL_SERVER, IID_IReceiver, (void**)&pIReceiver); |
Hierna volgt de aanroep van SetParam
code:
1
2
3
4
| if (SUCCEEDED(hRes))
{
pIReceiver->SetParam(341);
} |
Een MessageBox in de SetParam functie geeft de waarde 341 weer. Het aanmaken van het COM object en het aanroepen van member functies is dus geen enkel probleem. Maar wat ik nu zou willen is dat ik in de COM server de volgende aanroep kan doen
code:
1
| pIReceiver->GetParam(¶m); |
zodat ik de waarde, die de client heeft gezet, uit kan lezen in de server.
Als ik in de server ook de CoCreateInstance functie aanroep wordt er een nieuwe (lees: tweede) instantie van het COM object aangemaakt en kan ik wel de GetParam member functie aanroepen maar dan krijg ik natuurlijk niet de waarde terug die SetParam heeft gezet.
Wat moet ik nu doen zodat er maar 1 instantie van het COM object wordt aangemaakt die zowel door de client als door de server kan worden aangesproken?