Citat:
Citat:
deerbeer: Znaci ATL DLL module (vidi se po header-ima) :)
Code:
IUnknown *pUnk = NULL;
HRESULT kac = pUnk->QueryInterface(__uuidof(_DWnvVideo), (void**)&m_wnvVideo);
Ovo parce koda ti nece proci jer ce ti baciti null reference exception .
Ne mozes pozivati metodu sa NULL pointerom (mozda si nesto ispustila pri paste-ovanju koda)
Odakle dobijas IUnknown interface pointer ??
Izgleda da ga odnekud predhodno dobija, sudeci po ovome:
Citat:
Medjutim, meni QueryInterface ne prolazi i vraca E_NOINTERFACE. Pa sam zakljucila da je to zbog toga sto je ovaj moj interfejs iz kontrole u stvari Dispinterface, a primer na osnovu koga sam ja radila je bio sa Interface. Da li znate da li postoji neka zamena za QueryInterface koja bi radila sa dispinterface?
Ako QueryInterface( ) ne crash-uje, i vraca E_NOINTERFACE znaci da QueryInterface radi, a da jednostavno ne povezuje ulaznu GUID vrednost
ni sa jednim interface-om od onih za koje zna. Dakle, radi i dovoljan ti je (ne treba ti dispinterface), ali treba pazljivo pregledati GUID koji mu saljes. Ovo sve pod predpostavkom da su kod QueryInterface( ) napisali po pravilima.
@deerbeer:
mala primedba za ostatak dobro napisanog teksta:
m_wnvVideo je CComPtr, pa je elegantnije da koristi elipticne verzije COM funkcija:
Citat:
CComPtr<_DWnvVideo> m_wnvVideo;
hr = m_wnvVideo.CoCreateInstance(clsidWnvVideo);
Citat:
ActiveX je u principu dobar al ume da bude nekad zamoran i zapleten do nesnosnih granica .
Prilicno je uvrnut u nekoliko pogleda - ne koristi isti redosled i izbor handlera za crtanje (OnDraw( ), OnPaint( )) kao obicna MFC klasa, pa je
redosled inicijalizovanja crtackog pribora (pen, brush, rect) drugaciji. Sto je najgore, ActiveX test container koji je dolazio uz VisualStudio 6.0
nije izazivao svaki moguci scenario, pa je jedino real life (client app) neke slucajeve mogla da izazove. Konkretnije - ActiveX test container je
lepo testirao setovanje preko property pages, ali setovanja at run-time iz aplikacije (iz OnInitDialog( )) su imale svoje coskove koje je trebalo
ispeglati.
Daleko najgore ipak je sto za razliku od COM objekta, kad tokom razvoja komponente menjas/doradjujes interface, nije dovoljno prekompajlirati
sam modul + client aplikaciju.
U principu - mnogo dobra stvar je sto jednom zavrsen moze da se izuzetno lako koristi kao gotova komponenta. Medjutim, kod zastite aplikacija
(intelektualne svojine) predstavlja brigu na kvadrat - kompaktna funkcionalnost, mnogima bi dobro dosla za dzabe, mozes da mu sakrijes
kontejner unutar executable-a, ali ne mozes lako da sakrijes da postoji - odaje ga Registry i jos par detalja, i time samo navlaci 'lovce' na trag.