Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

(atl com service) problem sa client applikacijom

[es] :: C/C++ programiranje :: (atl com service) problem sa client applikacijom

[ Pregleda: 2511 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

borquee

Član broj: 10401
Poruke: 58
*.adsl.net.htnet.hr



Profil

icon (atl com service) problem sa client applikacijom27.08.2004. u 11:44 - pre 239 meseci
koristio sam ATL COM AppWizard iz VC6++ da napravim service (exe), dodao nekoliko metoda i to je sve ok. registrujem i upalim service bez problema (ima ga u task manager-u)

problem imam sa client aplikacijom koja ugasi service kad se zatvori... gde je problem?

Code:

CoInitialize(NULL);

CLSID clsid;
HRESULT hr;
IFB * FB;

hr= CLSIDFromProgID(OLESTR("ZZZ.FB"),&clsid);
if(FAILED(hr)) return;

hr=CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER , __uuidof(IFB),(void **)&FB);
if(FAILED(hr)) return;

int res;
res = FB->blabla();

CoUninitialize();



posle ovoga service nije na listi u task manager-u
 
Odgovor na temu

ljube
Ljubiša Knežević
Banjaluka

Član broj: 22429
Poruke: 158
81.93.74.*



+2 Profil

icon Re: (atl com service) problem sa client applikacijom27.08.2004. u 13:10 - pre 239 meseci
Code:

CoInitialize(NULL);

CLSID clsid;
HRESULT hr;
IFB * FB;

hr= CLSIDFromProgID(OLESTR("ZZZ.FB"),&clsid);
if(FAILED(hr)) return;

hr=CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER , __uuidof(IFB),(void **)&FB);
if(FAILED(hr)) return;

int res;
res = FB->blabla();

FB->Release();  
CoUninitialize(); 


Nedostaje FB->Release(); prije CoUninitialize();
Nisam siguran da li ti ovo pravi probleme ali u svakom slucaju, moras da pozoves Release metod prije izlaska iz klijent aplikacije.

Ljubisa




 
Odgovor na temu

borquee

Član broj: 10401
Poruke: 58
*.net.vip.hr



Profil

icon Re: (atl com service) problem sa client applikacijom04.09.2004. u 15:18 - pre 239 meseci
posle Release se takodje gasi service...
jedino kad se ne pogasi je kad ne stavim

FB->Release() i CoUninitialize()... mada mi se cini da to nije naj pametnije, jel to moze da pravi neke probleme (memory leak i slicno)
 
Odgovor na temu

ljube
Ljubiša Knežević
Banjaluka

Član broj: 22429
Poruke: 158
*.dialup.blic.net



+2 Profil

icon Re: (atl com service) problem sa client applikacijom04.09.2004. u 16:12 - pre 239 meseci
Bez poziva Release() definitivno mozez da imas "memory leaks". Koliko ja shvatam, Release je najslicniji destruktoru klasa u C++.

Svaki poziv AddRef() metode (IUnknown) treba da uveca neki interni brojac a poziv Release treba da ga smanjuje za jedan. Mislim da Windows sam odlucuje o "zivotu" COM objekata na osnovu ovog brojaca. Mozda je problem u tome da ne uvecavas ovaj brojac pozivom AddRef() ili se on ne uveca kada se COM objekat pokrene kao servis.
AddRef() metoda vraca ULONG kao i Release() a on zavisi od broja pokrenutih instanci.

Pouksaj da napravis trace ili neki log vracenih vrijednosti poslje poziva AddRef() i Release(), mozda cak iz samog COM objekta. Mislim da ti tu lezi problem.


 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.client.comcast.net



+1001 Profil

icon Re: (atl com service) problem sa client applikacijom04.09.2004. u 16:38 - pre 239 meseci
AddRef( ) se (kod pametno pisanih COM objekata) po defaultu zove unutar prvog
poziva na QueryInterface (koji se opet, u vasem slucaju poziva unutar
CoCreateInstance( ) - taj posao obicno uradi tzv. class factory - objekat cija je
uloga 'sekretarska' - jedini zna unutrasnju strukturu COM objekta tako da ga moze
instancionirati, dobije pointer na interfejs, i predaje ga spoljnom svetu, drzeci pritom
jezik za zubima sto se tice svega ostalog).

Ko je god dobio pointer na interface bi trebalo (da ne kazem 'mora') da zove Release
na taj interface. U protivnom, COM objekat nece biti unisten kad mu dodje vreme.

Nije mi jasan deo sa
Citat:
problem imam sa client aplikacijom koja ugasi service kad se zatvori... gde je problem?


Ovako kako si napisao kod (prvo zoves Release( ), sto ce sasvim izvesno da unisti
instancu tvog COM objekta, a zatim CoUninitialize( ) koji gasi ceo COM runtime. Time
si jasno stavio do znanja da si zavrsio sa koriscenjem servisa. Sta te onda cudi sto ga nema u taskbaru ???

 
Odgovor na temu

[es] :: C/C++ programiranje :: (atl com service) problem sa client applikacijom

[ Pregleda: 2511 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.