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

VB i VC++ DLL

[es] :: C/C++ programiranje :: VB i VC++ DLL

Strane: 1 2

[ Pregleda: 13178 | Odgovora: 34 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

jc denton

Član broj: 2358
Poruke: 1705
*.ptt.yu



Profil

icon Re: VB i VC++ DLL 25.02.2002. u 09:16 - pre 269 meseci
U pravu si, ja sam pogresio. Znas kako je kad nikada nisam radio u c++...

fire, walk with me
 
Odgovor na temu

jc denton

Član broj: 2358
Poruke: 1705
*.ptt.yu



Profil

icon Re: VB i VC++ DLL 25.02.2002. u 18:42 - pre 269 meseci
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;

}


fire, walk with me
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: VB i VC++ DLL 25.02.2002. u 20:29 - pre 269 meseci
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.
 
Odgovor na temu

jc denton

Član broj: 2358
Poruke: 1705
*.ptt.yu



Profil

icon Re: VB i VC++ DLL 26.02.2002. u 13:56 - pre 269 meseci
e pa sada radi bas kako treba, samo kako se optimizuje (i da li moze) za neki set intrukcija (MMX) ?

Hvala jos jednom.
pozdrav
fire, walk with me
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16687
*.verat.net



+7173 Profil

icon Re: VB i VC++ DLL 26.02.2002. u 14:05 - pre 269 meseci
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..

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

jc denton

Član broj: 2358
Poruke: 1705
*.ptt.yu



Profil

icon Re: VB i VC++ DLL 26.02.2002. u 14:23 - pre 269 meseci
znaci u mom slucaju 'pisi propalo' ...
fire, walk with me
 
Odgovor na temu

jc denton

Član broj: 2358
Poruke: 1705
*.ptt.yu



Profil

icon Re: VB i VC++ DLL 11.03.2002. u 19:51 - pre 269 meseci
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 :).
fire, walk with me
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: VB i VC++ DLL 11.03.2002. u 21:41 - pre 269 meseci
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...
 
Odgovor na temu

jc denton

Član broj: 2358
Poruke: 1705
*.ptt.yu



Profil

icon Re: VB i VC++ DLL 12.03.2002. u 13:43 - pre 269 meseci
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
fire, walk with me
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: VB i VC++ DLL 12.03.2002. u 15:57 - pre 269 meseci
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...
 
Odgovor na temu

jc denton

Član broj: 2358
Poruke: 1705
*.ptt.yu



Profil

icon Re: VB i VC++ DLL 30.09.2002. u 15:33 - pre 262 meseci
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
fire, walk with me
 
Odgovor na temu

Preeky
Bg

Član broj: 1586
Poruke: 40
*.beotel.net



+21 Profil

icon Re: VB i VC++ DLL 03.10.2002. u 03:27 - pre 262 meseci
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.

int main[] = { 0xc3 };
 
Odgovor na temu

Preeky
Bg

Član broj: 1586
Poruke: 40
*.beotel.net



+21 Profil

icon Re: VB i VC++ DLL 03.10.2002. u 15:56 - pre 262 meseci
Citat:
jc denton:
Hvala u svakom slucaju, a je l' to bese onaj Preeky sa Bechmark-a ? ;)





ja sam :)

int main[] = { 0xc3 };
 
Odgovor na temu

jc denton

Član broj: 2358
Poruke: 1705
62.193.143.*



Profil

icon Re: VB i VC++ DLL 17.02.2005. u 00:14 - pre 233 meseci
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.
fire, walk with me
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
66.228.70.*



+6 Profil

icon Re: VB i VC++ DLL 17.02.2005. u 15:54 - pre 233 meseci
E, pa živ nam bio druže člane, na mnogaja ljeta.
 
Odgovor na temu

[es] :: C/C++ programiranje :: VB i VC++ DLL

Strane: 1 2

[ Pregleda: 13178 | Odgovora: 34 ] > FB > Twit

Postavi temu Odgovori

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