Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 34 odgovora
  • 20.354 pregleda

Najnovija ↓

Re: VB i VC++ DLL 25.02.2002. u 10:16 · pre 300 meseci #21
U pravu si, ja sam pogresio. Znas kako je kad nikada nisam radio u c++...
Potpis
fire, walk with me
Re: VB i VC++ DLL 25.02.2002. u 19:42 · pre 300 meseci #22
Evo koda iz onog dll-a. Radi super, ali da li moze ovo nekako da se optimizuje da radi jos brze ?
Cini mi se da se vreme u stvari gubi na poziv ove funkcije (poziv iz VB-a), jer na pr. ako imam 500 kb da obradim, za 1 megabajt nije srazmerno vece vreme obrade.
Da li moze da se poziva nekako brze ?
Kada u VC++ ukljucim optimizaciju (optimize : maximize speed) pri build javlja se greska:
'Command line error D2016 : '/ZI' and '/O2' command-line options are incompatible'


Code:

#define STRICT
#include <windows.h>


__declspec(dllexport) int WINAPI
brrazlicitih(
unsigned char* prvif,            //prvifrejm
unsigned char* drugif,            //drugi frejm
unsigned char* videobaf,        //obradjeni frejm za prikaz smetnji
unsigned char* maska,            //niz za maskiranje, sta se nadgleda a sta ne
unsigned char* filterbajt,        //bajt za xor-ovanje
int koliko)                        //koliko bajta se uporedjuje
{

int j = 0; 
int razlbajt = 0;
for (j = 0; j < koliko; j=j+2) 
    { 
        if ( maska[j] == 0 )        // kontrola koji se bajtovi uporedjuju
        {     
            if ( (*(prvif+j) ^ *(drugif+j)) & *(filterbajt) )
            {
                razlbajt++;                    //    broj razlicitih bajtova
                videobaf[j] = 'a';            //    obrada  tekuceg frejma
                videobaf[j+1] = 'a';        //    prosto mu se dodaje neka boja da bi se videli pixeli koji se menjaju
                
            } 
        }
    }

return razlbajt;

}

Potpis
fire, walk with me
Re: VB i VC++ DLL 25.02.2002. u 21:29 · pre 300 meseci #23
Ona greška se obično javlja kada pokušavaš da uključiš optimizaciju u Debug verziji. Dakle, promeni na Release verziju (Build-Set Active Configuration - Release) i ne bi trebalo da bude problema. A može i da se desi ako probaš da uključiš debug informacije u Release verziju, ali ne verujem da je to slučaj.

A ako misliš da je pozivanje funkcije problem, to vreme možeš da skratiš ako funkciju koja poziva brrazlicitih (nadam se da je to jedna funkcija) prevedeš u C i prebaciš u dll. Onda ispred brrazlicitih stavi inline i ukloni declspec. Onda pozivaj tu drugu funkciju iz VB-a (samo jednom?).

Nadam se da nisam bio previše nejasan.
Potpis
IOCC
Re: VB i VC++ DLL 26.02.2002. u 14:56 · pre 300 meseci #24
e pa sada radi bas kako treba, samo kako se optimizuje (i da li moze) za neki set intrukcija (MMX) ?

Hvala jos jednom.
pozdrav
Potpis
fire, walk with me
Re: VB i VC++ DLL 26.02.2002. u 15:05 · pre 300 meseci #25
Za MMX/SSE/3DNow! kod optimizujes primenom inline assembly jezika -

na primer:

Code:


__asm {
  movq mm2, mm0
  punpcklbw mm2, mm1
  punpckhbw mm0, mm1
  emms
}



(Napomena - ovaj MMX kod ne radi nista pametno)

Moras poznavati MMX/SIMD/3DNow! assembler da bi mogao da optimizujes neku f-ju..
Potpis
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
Re: VB i VC++ DLL 26.02.2002. u 15:23 · pre 300 meseci #26
znaci u mom slucaju 'pisi propalo' ...
Potpis
fire, walk with me
Re: VB i VC++ DLL 11.03.2002. u 20:51 · pre 300 meseci #27
Evo mene opet sa jednim (meni) interesantnim problemom.

Naime, koristim jednu callback funkciju u VB-u, koja se 'okine' svaki put kada se frejm bafer od capture katice 'napuni'. Kad se to desi iz te callback funkcije poziva se C funkcija (brrazlicitih) iz dll-a koja vrsi neka poredjenja. Posto se ovo stalno 'vrti' dosta vremena gubim na pozivanje doticne C funkcije koja je u dll-u.

Da bi objasnio sta hocu, moram da napravim mali uvod.

FrameCallBack (ByVal lwnd As Long, ByVal lpvhdr As Long) As Long - callback funkcija koja se okida u ovom slucaju (funkcija je u VB-u). Ovu funkciju ja ne pozivam direktno nego je poziva drajver (valjda), pri 'dolasku' svakog novog frejma. Kada se ova callback funkcija okine, promenljiva lpvhdr daje adresu frejm bafera, preko koje pristupam podacima za obradu (varptr(lpvhdr)). Znaci u C++ morala bi analogno ovome da se deklarise.

Da bi sve ovo ovako radilo mora da se 'omoguci' ova callback funkcija na sledeci nacin :

SendMessage(lwnd, WM_CAP_SET_CALLBACK_FRAME, 0, AddressOf FrameCallback)
lwnd - hWnd od capture prozora koji prima poruku - nebitno
AddressOf FrameCallback - ovako se dobija adresa fn FrameCallback
Znaci skica celog procesa izgleda ovako :

novi frejm u baferu > okida se FrameCallBack > iz FrameCallBack funkcije poziva se brrazlicitih (koji je u DLL-u)

i tako u krug. Ovo se desava najmanje 10 puta u sekundi. Pa posto funkcija brrazlicitih treba da izvrsi obimna uporedjivanja, kako da dodjem do njene adrese u VB-u ? AddressOf u ovom slucaju nece moci, probao sam.
Mozda bi mogao da pozovem brrazlicitih kao do sada, pa da u DLL saznam njenu adresu, vratim tu vrednost u VB i onda ponovo setujem callback ali sa adresom od brrazlicitih ? Ovo je samo ideja, posto u C++ verovatno moze da se sazna adresa funkcije brrazlicitih, ako vec ne moze iz VB-a.

Jednostavno bi hteo da mi funcija brrazlicitih bude callback funkcija, a ne FrameCallBack koju bi da zaobidjem i ustedim vreme na poziv ove funkcije.

Znaci, da li postoji nacin da saznam adresu neke API funkcije, ili funkcije koja je u DLL-u, kao sto je kod mene slucaj ?

I jos nesto. Sta se desava ako se callback okine ponovo dok je poredjenje (u DLL-u) u toku ???
Znaci fn brrazlicitih u DLL-u jos nije zavrsila posao, a stize novi callback koji zove opet istu fn.
Kako da ovo sinhronizujem ???

Ili je sve ovo samo pusta teorija za one koji rade u VB-u :).
Potpis
fire, walk with me
Re: VB i VC++ DLL 11.03.2002. u 22:41 · pre 299 meseci #28
Evo kako bi to moglo "na brzaka" da se odradi.

Ubaciš u C++ dll funkciju

Code:

long GetbrrazlicitihAdresu()
{
long ret = &brrazlicitih;
return ret;
}


to staviš POSLE brrazlicitih, i dodaš mu ono declspec i WINAPI i sve isto kao za brrazlicitih. Onda tu funkciju jednom pozoveš iz VB-a da dobiješ adresu brrazlicitih, a dalje je lako...

A što se tiče "okidanja" callback-a dok je još funkcija u toku, ja se ne bih previše sekirao oko toga, jer po ovom što si naveo vidim da se za poziv callback-a koristi message queue a ne posebna nit, pa će zahtevi da stižu jedan po jedan.

Upozorenje: ovo gore sam kucao "iz glave" pa nije nemoguće da sam se negde zeznuo. Ako bude problema, viči...
Potpis
IOCC
Re: VB i VC++ DLL 12.03.2002. u 14:43 · pre 299 meseci #29
Zamisli, proradilo je ! Samo dobar je ovaj operator &, nisam znao da moze biti pointer i na funkciju u c++.
Sada samo jos da isprebacam sve iz VB-a u DLL i gotovo, ovo ce malo duze da potraje :)
Nego jel ima neko brzo objasnjenje za sledece u VC++:
u VB-u : Stavim dugme na formu, dupli klik na njega i proceduri sam za to dugme.
Kako bi to bilo u VC++?
nesto na brzaka, pa cu ja da eksperimentisem i proucim.

Pozdrav
Potpis
fire, walk with me
Re: VB i VC++ DLL 12.03.2002. u 16:57 · pre 299 meseci #30
Vrovao ili ne, isto i u VC-u: "nacrtaš" dugme, duplo klikneš, i već si tamo.

Mada, za razna podešavanja izgleda forme (boje, itd) VB je ipak mnogo bolji...
Potpis
IOCC
Re: VB i VC++ DLL 30.09.2002. u 16:33 · pre 293 meseca #31
Da podsetim na problem, imam pointer :

unsigned char* prvif

koji ukazuje na prvi bajt niza bajtova u memoriji.

Do sada sam pristupao pojedinacnim bajtovima kako je Dragi Tata opisao, a sada mi je potrebno da taj memorijski blok obradjujem kao matricu. Da li je moguce da se 'napravi' matrica na osnovu onog pointera i kako su onda 'napakovani' elementi matrice u memoriji, tj. da li je raspored sledeci :

a[0][0] a[0][1] a[0][2] ..., ili ?

Hteo bi da izbegnem memcpy i sl., ako je to moguce.

Pozdrav
Potpis
fire, walk with me
Re: VB i VC++ DLL 03.10.2002. u 04:27 · pre 293 meseca #32
Skoro mi je nesto slicno zatrebalo i ovako mi bilo najlakse da uradim

recimo da ti taj pointer pokazuje na niz od 20 bajtova u memoriji;
tu matricu mozesh da zamislish kao 4 x 5

o o o o o
o o o o o
o o o o|o|
o o o o o

e sad ti recimo treba pozcija [2][4]; posto je niz 1D pristupash ovako :
niz[4 + 2*sirina];

sirina je u ovom slucaju 5
znaci samo oblikuj niz u glavi u odgovarajucu matricu.
Potpis
int main[] = { 0xc3 };
Re: VB i VC++ DLL 03.10.2002. u 16:56 · pre 293 meseca #33
Citat:
jc denton:
Hvala u svakom slucaju, a je l' to bese onaj Preeky sa Bechmark-a ? ;)





ja sam :)
Potpis
int main[] = { 0xc3 };
Re: VB i VC++ DLL 17.02.2005. u 01:14 · pre 264 meseca #34
Dakle, tu smo.

Prodjose i tri godine (za malo) od kada sam prvi put postovao na dragom nam [es]-u. Te noci, posle velike muke sa C-om :o), nabasam ti ja na ovo chudo i vidim da se tu ipak nesto pametno prica. Rekoh, cek da priupitam ove ovde. I tako, od ove prve diskusije krenem da aktivno posecujem [es], cak mi je u nekim momentima to bila i potreba, ne zato sto sam nesto pitao ili pokrenuo neku diskusiju u svoju korist, nego, eto, bilo mi je jako zanimljivo i nekako mi je postala navika da cim izadjem na net prvo vidim sta ima u carsiji - [es] :)

E, moram da kazem i da je tada bilo malo opustenije i za mene bar interesantnije na neki nacin. Kratke diskusije, ne kilometarske, ali jako interesantne, programiranje uglavnom. I tako, vremenom su stigli i profesionalci, neki novi moderatori, ljudi se bore ko ce da moderise svoj forum bolje. Stvaraju se i novi forumi. Modovi dolaze i odlaze, ali ipak mi se cini da je cela stara ekipa i dalje tu. Hehe, navike se tesko izgube... ja bar jos uvek planiram da budem drug clan... i ne ide mi se nikako ;)

Nadam se da staroj ekipi nije dosadio [es] i da cemo da proslavimo i neku deceniju valjda ;)

A, nadam se da [es] i dalje ima slican uticaj na nove korisnike, jer da nema... ne bi bio [es].


Ajd' u zdravlje.
Potpis
fire, walk with me
Re: VB i VC++ DLL 17.02.2005. u 16:54 · pre 264 meseca #35
E, pa živ nam bio druže člane, na mnogaja ljeta.
Potpis
IOCC
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme