Toon posts:

[COM] COM server en client vraagje

Pagina: 1
Acties:

Verwijderd

Topicstarter
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.
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(&param);

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?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Je zal niet elke keer een nieuw object moeten maken, maar zorgen dat je elke keer dezelfde krijgt. Je kan daarvoor de ROT (Running Object Table) gebruiken.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Beste LordLarry,

Hartelijk dank dat je me hebt gewezen op de Running Object Table,
met behulp van ROT krijg ik nu elke keer hetzelfde object terug, geweldig!


Sven.

<span style="color:blue">modbreak: groetjes/onderschrift/aanhef boven en onder je post vinden we als tweakers onder elkaar alleen maar ruimte- en bandbreedteverspilling: binnen de community doen we elkaar permanent de groeten hoor ;)</span>

Je hebt gelijk, 'k zal het nooit meer doen _/-\o_

[ Voor 49% gewijzigd door Verwijderd op 12-02-2004 14:40 ]


Verwijderd

Topicstarter
Ook zou je de volgende regel

code:
1
DECLARE_CLASSFACTORY_SINGLETON(CReceiver)


in de interface file van CReceiver op kunnen nemen.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Klopt, maar dat is alleen per process singelton.

We adore chaos because we like to restore order - M.C. Escher