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

dialog i activeX control

[es] :: C/C++ programiranje :: dialog i activeX control

[ Pregleda: 4848 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Neznalica_sa_ugla
split

Član broj: 83282
Poruke: 390
*.xnet.hr.



Profil

icon dialog i activeX control09.02.2006. u 08:08 - pre 198 meseci
Molim ako ko zna ......
da mi ukratko napise kako se na dialog stavlja activeX control u studio -6
c++ , platvorma sdk , hvala .
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.hsd1.mn.comcast.net.



+1000 Profil

icon Re: dialog i activeX control27.04.2008. u 02:20 - pre 171 meseci
Ima nekoliko bitnih koraka:

1) Kad kreiras dialog projekt, negde na trecem dijalogu wizzard-a imas opciju 'What other option would you like
to include' kod koje strikliras ActiveX. Ovim tvoja dialog-based aplikacija dobija ugradjene intertfejs-ove potrebne
za komunikaciju sa ActiveX kontrolom.

2) Kad zavrsis sa wizzardom i sve je spremno za kompajliranje, odes na Project->Add To Project->Components and Controls
i zavisno od toga kakvu kontrolu hoces (Microsoft-ovu ili mozda bilo koju drugu) odaberes Registered ActiveX Controls ili VisualC++
controls. Iz liste ponudjenih kontrola odaberes onu koja te zanima i kliknes na nju.

3) Pojavice se dialog window "Confirm Classes" koji kad stisnes OK ubacuje u tvoj projekat header fajl za proxy klasu koja u tvom projektu
reprezentuje ActiveX kontrolu sa kojom ces raditi.

Ako je sve ovo uradjeno kako treba, na prozorcicu resource editora na kojem su naredjane sve kontrole (button, edit, rich edit, list,..)
ce se na samom dnu naci i ikonica tvoje kontrole sa kojom posle toga radis sve sto i sa bilo kojom drugom kontrolom - prevuces je na
dialog u resource editoru, podesis poziciju, dimenzije, dodelis joj kontrolnu promenljivu, inicijalizujes je u OnInitDialog( ) i pozivas metode
tokom rada.

Rad sa ActiveX kontrolom tokom razvoja ima dosta neprijatnih trikova, pogotovo ako se menja interfejs (dodaju novi metodi ili public data
clanovi). Ako je kontrola vec gotova, onda je sve vrlo prosto i elegantno. Pravo je zadovoljstvo kreirati nesto korisno u vidu ActiveX kontrole
i posle ga koristiti kad god ti zatreba lako, brzo, elegantno.

[Ovu poruku je menjao milanche dana 27.04.2008. u 03:42 GMT+1]
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-1.sezampro.yu.



+395 Profil

icon Re: dialog i activeX control28.04.2008. u 22:38 - pre 171 meseci
Ako ne koristis kroz wizard vs6.0 mozes i kroz kod da napravis activex

Code:

(npr Flash player activex  a vazi i ostale activex controle ) 
#import "C:\\WINDOWS\\system32\\Macromed\\Flash\\Flash9e.ocx" 
// direktiva koja prepreocesoru govori da napravi .tlh i .tlb fajlove u kojim se nalaze opisi activex modula (ShockwaveFlashObjects::IShockwaveFlash)
ShockwaveFlashObjects::IShockwaveFlash* m_pFlash  = NULL ; 

CoInitialize(NULL); 
CLSID clsidFlash ; 
CLSIDFromProgID(L"ShockwaveFlash.ShockwaveFlash",&clsidFlash) ;


//instanca active-x bez svog prozora 
hr = CoCreateInstance(clsidFlash,NULL,CLSCTX_ALL,__uuidof(IShockwaveFlash),(void**)&m_pFlash);


//instanca active-x sa prozorom
CWnd pWndCtrl ; 
UINT nID  = 2003 ; //npr ... 
//visina i sirina flash playera 
CRect rectWndFlash(0,0,rectWnd.Width(),rectWnd.Height()) ; 
BOOL bResullt = pWndCtrl.CreateControl(clsidFlash, _T("Flash Player"), WS_VISIBLE,rectWndFlash,this,nID);
//ovde je this pointer na tvoj mfc dijalog ili prozor u kome hostujes tvoj activex 


if (bResult){
IUnknown *pUnk = pWndCtrl.GetControlUnknown();
hr = pUnk->QueryInterface(__uuidof(IShockwaveFlash),(void**) &m_pFlash);
}


CString strFile ;
m_pFlash->PutMovie((LPCTSTR) strFile);
..
CoUnitiailize() ; 





[Ovu poruku je menjao deerbeer dana 29.04.2008. u 09:25 GMT+1]
Viva lollapalooza
 
Odgovor na temu

ginjasvinja
beograd

Član broj: 77697
Poruke: 21
212.200.27.*



Profil

icon Re: dialog i activeX control23.07.2008. u 14:42 - pre 168 meseci
Pozdrav svima,
nisam htela da otvaram novu temu, posto vidim da ih nema bas nesto mnogo vezanih za ActiveX i COM. Moje pitanje se nekako prirodno nadovezuje na ovo prethodno. Imam gotovu ActiveX kontrolu koju treba da iskoristim u svom programu. Radim dll projekat tako da je ona laksa varijanta sa dodavanjem kontrole u Dialog otpala. Sledeci uputstva i tutoriale (kojih bas i nema mnogo na ovu temu) sa neta uspesno sam dodala interfejse iz kontrole u projekat. Ali mi poziv funkcije QueryInterface() vraca E_NOINTERFACE. Onda sam zakljucila da su mi interfejsi u ActiveX kontroli definisani kao dispinterface. Procitala sam da zbog toga ne prolazi QueryInterface.
Moje pitanje je: koja je razlika izmedju interface i dispinterface i da li postoji adekvatna zamena za QueryInterface koja radi sa dispinterface?
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.hsd1.ca.comcast.net.



+1000 Profil

icon Re: dialog i activeX control23.07.2008. u 18:27 - pre 168 meseci
Dispinterface je napravljen sa ciljem da i programi pisani u VisualBasic-u (koji nema pointere) mogu da pozivaju metode
COM objekta. Pozivi odredjenog metoda interfejsa se vrse tako sto se IDispatch::Invoke( ) pasuje redni broj funkcije koja
se poziva (http://msdn.microsoft.com/en-us/library/aa912367.aspx).

Ako sam dobro shvatio, ti pokusavas da napravis faceless DLL, i da pozivas samo neke metode ActiveX kontrole ? Takav
slucaj koji pokusavas da implementiras je prilicno neuobicajen 'corner case'.

Svrha ActiveX kontrole je uglavnom da ucini lako dostupnim vizuelni/interaktivni pristup odredjenoj funkcionalnosti.
Ogromna vecina kontrola nesto iscrtava i vrlo cesto reaguje na misa ili tastaturu. Dakle, podrazumeva se da ce glavninu
svog radnog veka provesti instancionirana na dialog-u ili view-u aplikacije. Cinjenica je da moze da bude ucinjena nevidljivom
sto se obicno radi u security primenama (brana protiv neautorizovanog koriscenja programa, i slicno).

Ako ti je stalo da koristis ActiveX kontrolu u okviru DLL-a, postoji opcija da DLL bude MFC-extension DLL, da ima svoje resurse
(dialog, menu, buttons,...) i da na dialogu ima instancu ActiveX kontrole, i da se kao takva moze at run time pozicionirati na
zeljeno mesto na dialog-u ili view-u.

Ako je zahtev projekta bas striktno kreiranje 'faceless' DLL-a i koriscenja metoda ActiveX objekta kao obicnog COM objekta,
moram da priznam da je to prilicno redak scenario sa kojim se nisam susretao (a ima vec i dosta godina od kada sam ih pisao
poslednji put), i jedva cekam da vidim kompletan odgovor na to pitanje...
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-a-1.sezampro.yu.



+395 Profil

icon Re: dialog i activeX control23.07.2008. u 19:30 - pre 168 meseci
Citat:

Ako sam dobro shvatio, ti pokusavas da napravis faceless DLL, i da pozivas samo neke metode ActiveX kontrole ? Takav
slucaj koji pokusavas da implementiras je prilicno neuobicajen 'corner case'.

Ako je zahtev projekta bas striktno kreiranje 'faceless' DLL-a i koriscenja metoda ActiveX objekta kao obicnog COM objekta,
moram da priznam da je to prilicno redak scenario sa kojim se nisam susretao (a ima vec i dosta godina od kada sam ih pisao
poslednji put), i jedva cekam da vidim kompletan odgovor na to pitanje...

Pa nije bas neuobicajen.
Meni je u jednom programu trebala WebBrowser ActiveX i koje je bila invisible, a koristila mi je
za logovanje na jedan yahoo web service (Flickr) jer mi je ceo browser zauzimao dosta mesta na dijalogu
a ceo proces nije mogao da se odradi preko obicnog HTTP zahteva tj. wininet-a.
Ali ipak stoji da ActiveX je ipak predvidjen-dizajniran da ima svoj GUI. U protivnom koristi se obican COM objekat ..

Citat:

Ako ti je stalo da koristis ActiveX kontrolu u okviru DLL-a, postoji opcija da DLL bude MFC-extension DLL, da ima svoje resurse
(dialog, menu, buttons,...) i da na dialogu ima instancu ActiveX kontrole, i da se kao takva moze at run time pozicionirati na
zeljeno mesto na dialog-u ili view-u.

ActiveX kontrolu mozes da instanciras i u regular MFC DLL-u a ne samo kao extension DLL
Razlika izmedju regular i extension DLL-a je da se extension dll exportuje kao mfc klasa ( mogu se pozivati samo iz MFC programa )
a regular kao export c funkcija i da regular dll nema svoj message loop ali i to se moze prevazici
tako sto se win poruke koje dolaze iz aplikacije prosledjuju dll-u :
Code:
 
BOOL FilterDllMsg(LPMSG lpMsg)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState())
   return AfxGetApp()->PreTranslateMessage(lpMsg);
}

Ovo je korisno ako hoces da uradis npr. "override" desnog klika ActiveX kontrole
Recimo da imas WebBrowser kontrolu a da neces da prikazujes standardni contex-meni od browsera nego neki svoj custom meni

@ginjasvinja
Jel radis MFC ili ATL DLL projekat ? A mozda da postujes kod da se vidi o cemu se radi ...






Viva lollapalooza
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.hsd1.ca.comcast.net.



+1000 Profil

icon Re: dialog i activeX control23.07.2008. u 21:50 - pre 168 meseci
Citat:
ActiveX kontrolu mozes da instanciras i u regular MFC DLL-u a ne samo kao extension DLL


Nije rec o tome (tj. o kontejneru u kojem se moze nalaziti ActiveX kontrola) - ako sam ja nju lepo shvatio,
ona pokusava da kreira DLL koji ce da koristi servise ActiveX kontrole (dakle, ceo jedan dodatni nivo indirekcije)
U tom slucaju meni izgleda da je MFC-extension DLL prilicno bolje resenje.
 
Odgovor na temu

ginjasvinja
beograd

Član broj: 77697
Poruke: 21
212.200.27.*



Profil

icon Re: dialog i activeX control24.07.2008. u 12:42 - pre 168 meseci
Ovako, koliko god da vam ovo neuobicajeno zvuci, koristim najobicniji dll. Takav sam zadatak dobila, a evo i zasto. Glavna aplikacija sa kojom radimo je java aplikacija. Posto ona zahteva pritupanje prifernim uredjajima koji su povezani na PC, koristimo JNI i pozivamo funkcije iz dll biblioteke koje se obracaju periferijama. Ta biblioteka je obican dll pravljen u Visal Studio C++. Sada toj funkcionalnosti treba dodati kameru, tako da treba da prosirimo postojeci dll. Ja sa tom kamerom necu nista specijalno da radim, osim da joj prosledim komandu da uslika snimak i sacuva ga na hardu. Korisnik aplikacije ne treba da komunicira sa kamerom, pa mi ne treba nikakav GUI. Kada se kamera instalira, registruje se AcitiveX kontrola. Ja sam vise volela da dobijem neki API umesto kontrole (posto se inicijalno bavim javom i C radim samo kad moram ;) ), ali nemam izbora. Posto sam prvo trebala da istestiram tu kontrolu, odradila sam klasicnu Dialog aplikaciju, dodala kontrolu i videla da to radi. Ali kada sam se pomerila malo dalje ka dll projektu, tu sam naisla na velike probleme. Jedva sam iskopala na netu kako da odradim tu stvar sa dll-om, kad sam shvatila da mi je interfejs u kontroli definisan kao diepinterfejs i onda opet procitala da QueryOnterface ne prolazi zbog toga.

Evo sta sam radila: (sve primedbe su dobrodosle)

- kreirala obican dll projekat
- dodala .IDL fajl (koji sam dobila uz instalaciju) u projekat
- zbildala sam projekat i automatski su mi se pojavili interfejsi iz kontrole medju klasama (_DWnvVideo i _DWnvVideoEvents)
- dodala sam u stdafx.h sledece linije:
Code:

#include <afxwin.h>
#include <atldef.h>
#include <atliface.h>
#include <atlbase.h>
extern CComModule _Module;
#include <atlcom.h>
#include <atlhost.h>

- U .cpp sam dodala:
Code:

CComModule _Module;

- napravila sam klasu koja ce mi sluziti za baratanje kontrolom, pa sam u konstruktor dodala:
Code:

_Module.Init(NULL,NULL);

a u destruktor:
Code:

_Module.Term();

Jedan od atributa klase mi je pokazivac:
Code:

CComPtr<_DWnvVideo>        m_wnvVideo;

U metodu koji treba da pozove kontrolu imam:
Code:

IUnknown *pUnk = NULL;
HRESULT kac = pUnk->QueryInterface(__uuidof(_DWnvVideo), (void**)&m_wnvVideo);


Dalje treba da mogu da pozivam metode iz kontrole sa npr. m_wnvVideo->startup().

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?
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-3.sezampro.yu.



+395 Profil

icon Re: dialog i activeX control24.07.2008. u 14:50 - pre 168 meseci
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 ??

Da bi instancirala objekat potrebni su ti CLSID_xxxx (ClassID) i IID_xxxx (interface ID) koje mozes naci u samom IDL fajlu ili
da preko #import direktive nad tim *.ocx ili *.dll dobijes potrebne *.tlb i *.tlh fajlove u kome se nalaze Identifikatori
pa onda da pozoves funkciju CoCreateInstance (...)

Code:
 
CComPtr<_DWnvVideo>    m_wnvVideo;
CoInitialize(NULL) ; //obavezno ova linija koda  koja inicijalizuje COM okruzenje ... 

CLSID clsidWnvVideo; // ovo dobijas iz *.tlh header fajlova ili ga imas u samo IDL-u .... 
HRESULT hr = CoCreateInstance(clsidWnvVideo,NULL,CLSCTX_ALL,__uuidof(_DWnvVideo), (void**)&m_wnvVideo);
m_wnvVideo->start_up() ; 
..
CoUninitalize(); 


Ako se radi o web kameri predlozio bih ti da predjes na DirectShow API sa kojim mozes sve to da odradis ...
U to ukljucuje renderovanje slike, grabovanje frame-a i snimanje u avi fajl .
ActiveX je u principu dobar al ume da bude nekad zamoran i zapleten do nesnosnih granica .








Viva lollapalooza
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.hsd1.ca.comcast.net.



+1000 Profil

icon Re: dialog i activeX control24.07.2008. u 16:26 - pre 168 meseci
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.
 
Odgovor na temu

ginjasvinja
beograd

Član broj: 77697
Poruke: 21
212.200.27.*



Profil

icon Re: dialog i activeX control25.07.2008. u 08:31 - pre 168 meseci
Momci, hvala vam na iscrpnim i brzim odgovorima. Ja nisam htela da opterecujem post nepotrbnim kodom i htela sam da okacim samo ono sto se tice tekuceg problema, pa sam malo u tome i preterala. Imam #import direktivu u header fajlu:
Code:

#import "C:\\Program Files\\Winnov\\Videum\\VFW\\WnvVideo.ocx"
using namespace WNVVIDEOLib;


i imam odgovarajuce .tlb i .thl fajlove.

Imam i IUnknown pointer i taj deo koda prolazi ok. Pointer dobijam iz AtlAxGetControl metode, posto kreiram prozor zaduzen za igranje sa kontrolom. Elem, u konstruktoru imam:
Code:

_Module.Init(NULL,NULL);
AtlAxWinInit();


I onda kod povezivanja sa interfejsom seledeci kod:
Code:

GetWindowRect(hwnd, &rc);
if (rc.right != rc.left) wndWidth = rc.right-rc.left;
if (rc.bottom != rc.top) wndHeight = rc.bottom-rc.top;

hwndParent = hwnd;
        
hwndChild = ::CreateWindow("AtlAxWin", "WNVVIDEOLib.DWnvVideo", 
            WS_CHILD, 0,0,wndWidth,wndHeight, hwndParent, NULL,
            ::GetModuleHandle(NULL), NULL);

if(hwndChild == NULL)
{
    MessageBox(NULL,"Window CHILD creation feiled!","Error",MB_ICONEXCLAMATION | MB_OK);
}

IUnknown *pUnk = NULL;
AtlAxGetControl(hwndChild, &pUnk);
    
HRESULT kac = pUnk->QueryInterface(__uuidof(_DWnvVideo), (void**)&m_wnvVideo);


Milance, ti si u pravu, meni QueryInterface radi, ali ne prepoznaje GUID. Procitala sam da kada se radi sa dispinterface, uglavnom se desava da QueryInterface vraca E_NOINTERFACE. Sad, nemam pojma kako da iskontrolisem GUID, i posto mu najverovatnije ne saljem dobar, ima li nacina da ga nekako posaljem?
Da li sme da se menja postojeci .IDL fajl i da li bi eventualno njegova korekcija pomogla?

Sad cu da izmenim kod kako mi je Deerbeer predlozio, ali u tom slucaju zaobilazim IUnknown pointer koji mi je potreban za AtlAxGetControl metod. Kako da onda povezem kontrolu sa ATL prozorom?

[Ovu poruku je menjao ginjasvinja dana 25.07.2008. u 09:47 GMT+1]
 
Odgovor na temu

ginjasvinja
beograd

Član broj: 77697
Poruke: 21
212.200.27.*



Profil

icon Re: dialog i activeX control25.07.2008. u 09:22 - pre 168 meseci
Probala sa CoCreateInstance metodom i ona mi sada vraca REGDB_E_CLASSNOTREG. Lici mi da imam isti problem.
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-1.sezampro.yu.



+395 Profil

icon Re: dialog i activeX control25.07.2008. u 09:57 - pre 168 meseci
Posto radis sa ATL-om koristi klasu CAxWindow koja omogucava da hostujes prozor od ActiveX kontrole
http://msdn.microsoft.com/en-us/library/yx242b61(VS.80).aspx
Probaj ovako ... mada nisam testirao da li radi ...
Code:


CAxWindow wnd;
CLSID clsid;
CComPtr<IUnknown> pUnkCtrl ; 
HRESULT hr = CLSIDFromProgID(OLESTR("WNVVIDEOLib.DWnvVideo"), &clsid);
        
CComPtr<IUnknown> pUnkCtrl ; 
pUnkCtrl.CoCreateInstance(clsid) ; 

wnd.Attach(m_hWnd); // m_hWnd glavni prozor koji hostuje kontrolu ... 
wnd.AttachControl(pUnkCtrl,NULL); 

// pa kad attachujes objekat za prozor  onda pozovi QueryInterface ....
// 
CComPtr<_DWnvVideo>    m_wnvVideo;
HRESULT hr= pUnkCtrl->QueryInterface(__uuidof(_DWnvVideo), (void**)&m_wnvVideo);



_DWnvVideo (m_wnvVideo) objektu je potrebna instanca prozora da bi radila sa njim tj. pozivala funkcije
Cini mi se da ti je zbog toga vracao E_NOINTERFACE gresku .

Viva lollapalooza
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-1.sezampro.yu.



+395 Profil

icon Re: dialog i activeX control25.07.2008. u 10:14 - pre 168 meseci
Evo nadjoh, nadam se da ce ti pomoci:
http://support.microsoft.com/kb/218442


Viva lollapalooza
 
Odgovor na temu

ginjasvinja
beograd

Član broj: 77697
Poruke: 21
212.200.27.*



Profil

icon Re: dialog i activeX control25.07.2008. u 11:51 - pre 168 meseci
Probala sam da koristim klasu CAxWindow, ali mi se tu javlja problem sa javom. Javlja mi se greska koju baca java.exe, ali mi ne puca program, vec dobijam Microsoft-ov MessageBox da je doslo do greske. Kada koristim HWND ovo se ne desava.

Inace, zar ovaj kod koji ja imam ne radi bas to sto kazes(mislim, cinjenica je da ne radi, ali ja mislim da su druge stvari u pitanju)? Ja imam glavni prozor, onda pravim ATL dete prozor, povezujem prozor sa pokazivacem na IUnknown metodom AtlAxGetControl i na kraju punim pokazivac na interfejs iz kontrole. Na ovom microsot sajtu rade isto to samo sa klasom CAxWindow, ali ja ne mogu nju da koristim. Ja mislim da AtlAxGetControl upravo povezuje instancu prozora i m_wnvVideo. Mozda sam i totalno u krivu, ali tako nesto kontam. pa me ispravite ako gresim.

Druga stvar, kada sam umesto QueryInterface koristila metode koje si mi ti predlozio, CoCreateInstance mi je vratio REGDB_E_CLASSNOTREG. Postojala je opcija da mi vrati isto sto i QueryInterface tj. E_NOINTERFACE, ali nije. Tek sam sad u zbunu i pitam se da li zaista imam problem sa GUID-om. ili nemam. Kako da isproveravam to?

Ljudi, nece me biti tu dve nedelje, a onda se vracam da prodiskutujemo jos malo. Pozz!

[Ovu poruku je menjao ginjasvinja dana 25.07.2008. u 14:52 GMT+1]
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-1.sezampro.yu.



+395 Profil

icon Re: dialog i activeX control25.07.2008. u 14:07 - pre 168 meseci
Citat:

Probala sam da koristim klasu CAxWindow, ali mi se tu javlja problem sa javom. Javlja mi se greska koju baca java.exe, ali mi ne puca program, vec dobijam Microsoft-ov MessageBox da je doslo do greske. Kada koristim HWND ovo se ne desava.

Hmm ...Ako je java i ATL problem moguce je da ima neke nekompatibilnosti .. ne znam nisam mnogo radio sa ATL-om
Mozda malo glupo pitanje ali zasto jednostavno ne napravis Regular MFC DLL iz Visual studia i iskoristis kod sa pocetka ove teme radice ti 100% ?
Jer ti si napravila obican win32 prozor sa CreateWindow i u njemu nema informacije o IUnknown interfejsu,
zato je i Microsoft napravio CAxWindow u ATL za podrsku ActiveX kontrolama umesto standardnog CWindow-a

Code:

CLSID clsid;
HRESULT hr = CLSIDFromProgID(OLESTR("WNVVIDEOLib.DWnvVideo"), &clsid);
CComPtr<_DWnvVideo>   m_wnvVideo; 
CWnd pWndActivXCtrl ; 
CRect rectWndVideo(0,0,rectWnd.Width(),rectWnd.Height()) ; 

BOOL bResullt = pWndActivXCtrl .CreateControl(clsid, _T("WnvVideo"), WS_VISIBLE,rectWndVideo,this,nID);
//ovde je this pointer na tvoj glavni prozor u kome hostujes tvoj activex 

if (bResult){
IUnknown *pUnk = pWndActivXCtrl .GetControlUnknown(); 
hr = pUnk->QueryInterface(__uuidof(_DWnvVideo), (void**) &m_wnvVideo);
}


Viva lollapalooza
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.hsd1.ca.comcast.net.



+1000 Profil

icon Re: dialog i activeX control26.07.2008. u 08:03 - pre 168 meseci
Citat:
Probala sa CoCreateInstance metodom i ona mi sada vraca REGDB_E_CLASSNOTREG. Lici mi da imam isti problem.


Smrdi kao da nesto nije registrovano u Registry-ju. Sta je to nesto, nemam pojma, s obzirom da si odradila demo na Dialog aplikaciji.

Da nisi uninstalirala tu ActiveX kontrolu u medjuvremenu ? Ili presla na drugu masinu da radis ? Ne bi bilo lose da jos jednom probe radi
samo startujes tu svoju 'quick demo' aplikaciju...cisto da vidimo da li je sve u redu. Ako kontrola nije registrovana, neces stici ni do
OnInitDialog( ), aplikacija ce da se terminira znatno pre toga.

Ovde je covek imao slican slucaj, i izgleda da necemu tu ne prija konstantan GUID, nego je zdravije koristiti vrednost dobijenu dinamicki
(at run time):
http://forums.msdn.microsoft.c...a-ba13-4c8a-9e76-a633bdbd742b/

Moze da bude i ovo u pitanju: ovo je pitanje:
http://www.tech-archive.net/Ar...c.vc.mfc/2005-06/msg00911.html
a ovo je interesantan odgovor koji mozda ima neke veze sa tvojim slucajem:
http://www.tech-archive.net/Ar...c.vc.mfc/2005-06/msg00944.html
Citat:
I've solved the problem. The registry is OK and my program is ok,too. the problem is my win2003 hasn't JVM. it is a 3rd party
product. Through RegMon.exe, I find it.

Pogledaj i druga dva odgovora.
 
Odgovor na temu

ginjasvinja
beograd

Član broj: 77697
Poruke: 21
212.200.27.*



Profil

icon Re: dialog i activeX control13.08.2008. u 13:47 - pre 167 meseci
Cao ljudi, evo mene opet sa mojim problemom. Pricala sam sa kolegom koji je radio istu stvar kao i ja sada, s tim da je on sam pravio svoju kontrolu(i da ima dugogodisnje iskustvo ;)). I on misli da imam problem sa citanjem GUID-a. Rekao mi je da probam da izmenim .IDL fajl i da od dispinterface napravim dual interface, sto sam ja i uradila. Prilikom kompajliranja nemam gresaka, ali imam upozorenja za koja sam procitala da nisu opasna i ipak sam zbildala projekat u zelji da probam da li ce raditi nesto drugacije. Onda sam pocela da dobijam opet greske iz jave i definitivno imam neki problem sa ATL prozorom i javinim prozorom, najverovatnije sa verzijama (mimo one greske sa GUID - to nisam ni stigla da istestiram).
Elem, krenula da sam sa zamenom Atl prozora sa CWnd prozorom kako mi je Deerbeer predlozio. Znaci odradila sam sledece:

Code:

CLSID clsid;
HRESULT hr = CLSIDFromProgID(OLESTR("WNVVIDEOLib.DWnvVideo"), &clsid);
CComPtr<_DWnvVideo>   m_wnvVideo; 
CWnd pWndActivXCtrl ; 
CRect rectWndVideo(0,0,rectWnd.Width(),rectWnd.Height()) ; 

BOOL bResullt = pWndActivXCtrl .CreateControl(clsid, _T("WnvVideo"), WS_VISIBLE,rectWndVideo,hwndParent,nID);
//umesto this sam stavila hwndParent koji sam napravila prethodno, jer mi treba da ovaj bude njegovo dete

if (bResult){
IUnknown *pUnk = pWndActivXCtrl .GetControlUnknown(); 
hr = pUnk->QueryInterface(__uuidof(_DWnvVideo), (void**) &m_wnvVideo);
}


Ali ne mogu da ukapiram sta treba da stavim umesto parametra nID. Na msdn-u pise da je to ID kontrole, da li to znaci da treba da pozovem __uuidof(_DWnvVideo)?


 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
77.105.48.*



+395 Profil

icon Re: dialog i activeX control21.08.2008. u 19:20 - pre 167 meseci
ID je identifikator za datu win controlu. Kad postavis button ili combo-box na formu u design mode-u
Visual Studio automatski dodeljuje genericki ID koji mozes videti u resource-editoru
npr :
Code:

#define  IDC_MYBUTTON  235

Posto ti kreiras ActiveX kontrolu programski a ne u design mode-u onda moras sama da dodelis neku vrednost toj kontroli.
npr.
Code:
 
#define IDC_MY_WNVVIDEO 236 
BOOL bResullt = pWndActivXCtrl .CreateControl(clsid, _T("WnvVideo"), WS_VISIBLE,rectWndVideo,hwndParent,IDC_MY_WNVVIDEO );

i taj ID nema veze sa GUID-om i COM-om


Viva lollapalooza
 
Odgovor na temu

[es] :: C/C++ programiranje :: dialog i activeX control

[ Pregleda: 4848 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

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