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

VB i VC++ DLL

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

Strane: 1 2

[ Pregleda: 12038 | 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 VB i VC++ DLL 17.02.2002. u 00:45 - pre 241 meseci

Pazi ovamo ...

Iz VB saljem pointer (long) na prvi element niza, a u VC++ (tj u dll)
primam tu brojku. Mozda ne treba da se salje ByVal nego ByRef ??

Kako na ovaj ili neki drugi nacin da se prosetam kroz niz u dll-u ako imam pointer na prvi element niza koji sam poslao dll-u iz VB-a.

Tako mu je to kad ne znam da se setam po nizovima uz pomoc pointera u vc++.

Vazno :

Niz je byte tipa, tj onaj pointer na prvi element je u stvari pointer na memorijsku adresu odakle pocinje memorijski blok koji bi da obradim.


fire, walk with me
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
..ndg-pm4-1.dialup.nethere.net



+6 Profil

icon Re: VB i VC++ DLL 17.02.2002. u 01:15 - pre 241 meseci
Nisam baš siguran da sam te potpuno razumeo (u poslednje vreme sve češće počinjem postove tim rečima) ali mi se čini da si u VB-u definisao neki niz bajtova, pa hoćeš da pristupiš članovima tog niza u C funkciji (u DLL-u).

Pazi ovaj detalj: u VB-u, niz je u stvari ("ispod haube") SAFEARRAY. Međutim, kako je niz i unutar SAFEARRAY poređan sekvencijalno, to znači da možeš da pošalješ numerički niz dll-u tako što ćeš da pošalješ prvi element niza ByRef.

Sa C strane (u dll-u) dobijaš pointer na prvi član niza, a time i na ceo niz.

Primer:

sa VB strane:

Private Declare Function MyCFunction (ByRef array as Any, ByVal numEl as Long)
...
Dim array(3) as Long
array(0) = 1
array(1) = 2
array(2) = 3

MyCFunction array(0), 3

Sa C strane:

void MyCFunction (int* array, int numEl)
{
int i = 0;
for (i = 0; i < numEl; i++)
{
...
}
}

Možda sam se negde prešao u sintaksi, ali ideja je ta.
 
Odgovor na temu

jc denton

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



Profil

icon Re: VB i VC++ DLL 17.02.2002. u 01:41 - pre 241 meseci
Sve mi je jasno ali kako da u C++ referenciram prvi element niza kao sto bi uradio u VB na sledeci nacin :

vrednost = a(1)
Kako ovo da napisem u C++ ?

Ja u stvari ocu da uporedim dva niza veoma brzo (koristeci C++ DLL), a iz VB u DLL mogu da prosledim varptr(a(1)) i varptr(b(1)) ako su a i b nizovi koji se uporedjuju !
Varptr(a(1)) daje pointer na prvi element niza a.


fire, walk with me
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
..ndg-pm4-1.dialup.nethere.net



+6 Profil

icon Re: VB i VC++ DLL 17.02.2002. u 02:28 - pre 241 meseci
Prvi element niza dobijaš:

vrednost = a[0] ;

Nego, nema potrebe da koristiš varptr. Samo pošalji prvi element niza ByRef.

I još nešto. U C-u ne postoji Option Base. Tamo je prvi element niza UVEK a[0], a poslednji a[n-1].
 
Odgovor na temu

jc denton

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



Profil

icon Re: VB i VC++ DLL 17.02.2002. u 05:24 - pre 241 meseci
Sta kazes - programeri broje od nule a ostatak sveta od 1 ... , moracu i ja da predjem na VC++ jer me VB sve vise sputava kod low level funkcija.

Hvala puno za savete, inace ovo mi je trebalo da bi brzo uporedio frejmove pri Avi Capture (video nadzor).

pozdrav !

fire, walk with me
 
Odgovor na temu

jc denton

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



Profil

icon Re: VB i VC++ DLL 19.02.2002. u 18:00 - pre 240 meseci
Imam jos jedan problem as DLL-om koji sam poceo da radim :

Kompajliranje i Build prodje, ali kad ga registrujem sa :

regsvr32 roundme.dll

Prijavi sledecu poruku :

'roundme.dll was lodaded but DllRegisterServer entry point was not found.
DllRegisterServer may not be exported or corupt version of roundme.dll maybe in memory.'

Inace DLL funkcionise sem sto javlja ovu gresku pri instalaciji.

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 19.02.2002. u 18:10 - pre 240 meseci
Citat:
jc denton:
Imam jos jedan problem as DLL-om koji sam poceo da radim :

Kompajliranje i Build prodje, ali kad ga registrujem sa :

regsvr32 roundme.dll

Prijavi sledecu poruku :

'roundme.dll was lodaded but DllRegisterServer entry point was not found.
DllRegisterServer may not be exported or corupt version of roundme.dll maybe in memory.'

Inace DLL funkcionise sem sto javlja ovu gresku pri instalaciji.


Pazi ovako: registruju se samo ActiveX DLL-ovi (u C svetu još poznati kao COM serveri). U VB-u je to jedina vrsta DLL-a koja može da se napravi, ali u C-u postoje i "obični" DLL-ovi, koji ne treba da se registruju.
 
Odgovor na temu

jc denton

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



Profil

icon Re: VB i VC++ DLL 19.02.2002. u 21:20 - pre 240 meseci
Citat:
Dragi Tata:

Pazi ovako: registruju se samo ActiveX DLL-ovi (u C svetu još poznati kao COM serveri). U VB-u je to jedina vrsta DLL-a koja može da se napravi, ali u C-u postoje i "obični" DLL-ovi, koji ne treba da se registruju.

[/quote]


Znaci samo kazem u deklaraciji koja je putanja do njega i gotovo?
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 19.02.2002. u 21:33 - pre 240 meseci
Citat:
jc denton:

Znaci samo kazem u deklaraciji koja je putanja do njega i gotovo?


Tako je. Nego, pazi ovu caku: ako startuješ VB sa Start menija, smatraće da mu je App.Path negde u Project Files... blalbla, pa može da ti se desi da ne nađe tvoj dll iako je u istom direktorijumu gde i tvoj VB projekat. Rešenje je da startuješ VB projekat tako što ga duplo-klikneš iz Explorera. Tada će da traži dll u "tekućem" direktorijumu.

Inače, mislim da je dobra ideja da se "obični" dll-ovi ne kopiraju u Windows/System, nego da budu u istom folderu kao i exe.
 
Odgovor na temu

jc denton

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



Profil

icon Re: VB i VC++ DLL 19.02.2002. u 22:55 - pre 240 meseci
Inace za App.Path - no problemo.

E, evo ga kod za onaj dll sto pokusavam da uradim (zakacen je uz poruku).

Da li je sve ok, i ima li neceg nepotrebnog ?

A kako bi napisao sledece u C++ (onoj petlji u dll-u sto mi je za uporedjivanje) :

u VB bi bilo ovako :

if (niza(i) <> nizb(i)) Xor bajt then ... bajt je naravno byte tipa

Ivan Dimkovic mi je jos pre odgovorio za xor sledece :

__inline XorArray(unsigned char *array, int size, int xor_value)
{
for(x=0;x<size;x++)
array[x] ^= xor_value;
}

ali ovo ne umem da primenim.

Jel moze ovaj __inline nekako da ubrza stvar u mom dll-u ?
Ivan rece da u ovom slucaju ne moze ...


fire, walk with me
Prikačeni fajlovi
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: VB i VC++ DLL 19.02.2002. u 23:07 - pre 240 meseci
Uh, izgleda da je Ivan malo zbrzio. Evo ispravljena verzija njegove funkcije:

Code:

void XorArray(unsigned char *array, int size, int xor_value) 

int x;
for(x=0;x<size;x++) 
   array[x] ^= xor_value; 



a inline slobodno zaboravi u ovom slučaju. Ako te stvarno interesuje šta je to, objasniću ti drugom prilikom.

Za dll koji si poslao, pogledaću verovatno sutra. Danas nemam kad.
Pozdrav.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: VB i VC++ DLL 19.02.2002. u 23:09 - pre 240 meseci
Citat:
jc denton:
Sta kazes - programeri broje od nule a ostatak sveta od 1 ... , moracu i ja da predjem na VC++ jer me VB sve vise sputava kod low level funkcija.

Hvala puno za savete, inace ovo mi je trebalo da bi brzo uporedio frejmove pri Avi Capture (video nadzor).

pozdrav !


Ja se ne bih slozio sa tobom po tom pitanju... M$ sve vise razvija VB i to je ono sto je najsmesnije - daje mu neke stvari koje ce 0.1% programera koristiti (stvari koje C ima od pocetka). Sa druge strane M$ takodje menja svoj VC++ jer zeli da sve svoje "kompajlere" nekako poveze u jednu celinu i smatram da su sami jezici na neki svoj specifican nacin "izvestaceni"...
VB je sve mocniji i mocniji i sve lakse i lakse moze da se programira "nisko", ali kome to treba? Koliko VB programera zaista oseca potrebu za tim? - To je pitanje za diskusiju.

Kad budes presao na VC++ kukaces za nekim stvarima koje imas u VB, to je tako... A i logicno je. Ja sam vise puta pokusavao ljudima da objasnim da svaki jezik ima svoju primenu. Nauci OBA jezika, to je najbolje. DLLove i "core" stvari razvijaj u C/C++, a za primenu je VB dusu dao. Tu sije sve moguce jezike (za Wintendo). Polako ali sigurno na scenu stupa Zmija (Python), ali ko zna kako ce se stvari razvijati, moguce je da ce i M$ da napravi svoju verziju Python-a... Ja licno Python ne volim, ali priznajem da je mnooogo mocan. Huh, malo sam odleteo od teme... Izvinite. :)
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

jc denton

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



Profil

icon Re: VB i VC++ DLL 19.02.2002. u 23:14 - pre 240 meseci
Citat:
Dragi Tata:
Uh, izgleda da je Ivan malo zbrzio. Evo ispravljena verzija njegove funkcije:

Code:

void XorArray(unsigned char *array, int size, int xor_value) 

int x;
for(x=0;x<size;x++) 
   array[x] ^= xor_value; 



a inline slobodno zaboravi u ovom slučaju. Ako te stvarno interesuje šta je to, objasniću ti drugom prilikom.

Za dll koji si poslao, pogledaću verovatno sutra. Danas nemam kad.
Pozdrav.


Ok. Izvini ako te davim !
Za inline nije neophodno, mozda je jos prerano za mene ... a inace me interesuje.
Pozdrav !


fire, walk with me
 
Odgovor na temu

jc denton

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



Profil

icon Re: VB i VC++ DLL 19.02.2002. u 23:20 - pre 240 meseci
Citat:
leka:
Citat:
jc denton:
Sta kazes - programeri broje od nule a ostatak sveta od 1 ... , moracu i ja da predjem na VC++ jer me VB sve vise sputava kod low level funkcija.

Hvala puno za savete, inace ovo mi je trebalo da bi brzo uporedio frejmove pri Avi Capture (video nadzor).

pozdrav !


Ja se ne bih slozio sa tobom po tom pitanju... M$ sve vise razvija VB i to je ono sto je najsmesnije - daje mu neke stvari koje ce 0.1% programera koristiti (stvari koje C ima od pocetka). Sa druge strane M$ takodje menja svoj VC++ jer zeli da sve svoje "kompajlere" nekako poveze u jednu celinu i smatram da su sami jezici na neki svoj specifican nacin "izvestaceni"...
VB je sve mocniji i mocniji i sve lakse i lakse moze da se programira "nisko", ali kome to treba? Koliko VB programera zaista oseca potrebu za tim? - To je pitanje za diskusiju.

Kad budes presao na VC++ kukaces za nekim stvarima koje imas u VB, to je tako... A i logicno je. Ja sam vise puta pokusavao ljudima da objasnim da svaki jezik ima svoju primenu. Nauci OBA jezika, to je najbolje. DLLove i "core" stvari razvijaj u C/C++, a za primenu je VB dusu dao. Tu sije sve moguce jezike (za Wintendo). Polako ali sigurno na scenu stupa Zmija (Python), ali ko zna kako ce se stvari razvijati, moguce je da ce i M$ da napravi svoju verziju Python-a... Ja licno Python ne volim, ali priznajem da je mnooogo mocan. Huh, malo sam odleteo od teme... Izvinite. :)



Generalno se slazem, a VB-a se ni ja ne bi nikako odreko. Samo izgleda da ne moze uvek sve da se zavrsi u njemu - sto me po neki put strasnooo nervira. Ajde nabaci novu temu u VB forumu pa da popricamo o nekim low level stvarima sa ostalim 0.1% korisnika koji koriste VB-u dostupan API itd.
:)


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 20.02.2002. u 16:47 - pre 240 meseci
Citat:
jc denton:

Ok. Izvini ako te davim !
Za inline nije neophodno, mozda je jos prerano za mene ... a inace me interesuje.
Pozdrav !


Ama ne daviš me, volim ja da pomognem ljudima koji stvarno "grizu", samo u ovoj Americi mora malo i da se radi :)

Nego, natrpao si mnogo nepotrebnih stvari tamo. Sve što ti treba je jedan .cpp fajl koji sadrži sledeće:

Code:

extern "C" __declspec(dllexport) int brrazlicitih(int* niza, int* nizb, int koliko)

{

int j = 0; 
int vraca = 0; 

for (j = 0; j < koliko; j++) 
     { 
     if ( niza[j] != nizb[j] )    
     vraca++;    
    } 
 
return vraca;
}



Ako mu promeniš ekstenziju u .c , onda ti ne treba ni ono extern "C".

Uglavnom, malo sam uprostio funkciju, jer mi je Gojko objasnio zašto se ne vidi i u uglastim zagradama.

Def fajl ti ne treba ako koristiš declspec.

Nego, evo ti jedan sajt kao stvoren za tebe:

http://www.boondog.com/..%5Ctutorials%5Cdlltutor%5Cdlltutor.htm
 
Odgovor na temu

jc denton

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



Profil

icon Re: VB i VC++ DLL 21.02.2002. u 00:56 - pre 240 meseci
Pobrisao sam sve ostale fajlove osim .cpp ali nesto ne radi. Javlja 'Bad dll calling convention'. Inace compile i build prolaze.
U vb-u deklaracija je ovakva :

Private Declare Function brrazlicitih Lib _
"c:\windows\desktop\roundme.dll" _
(ByRef niza As Any, ByRef niza As Any, ByVal koliko As Long) As Long

.cpp izgleda sada ovako (kako si i napisao) :

#define STRICT
#include <windows.h>

HINSTANCE hInst ; //dll's instance handle ' jel ovo treba da ostane ?

extern "C" __declspec(dllexport) int brrazlicitih(int* niza, int* nizb, int koliko)

{

int j = 0;
int vraca = 0;

for (j = 0; j < koliko; j++)
{
if ( niza[j] != nizb[j] )
vraca++;
}

return vraca;
}

fire, walk with me
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
209.132.90.*



+6 Profil

icon Re: VB i VC++ DLL 21.02.2002. u 04:47 - pre 240 meseci
Citat:
jc denton:
Pobrisao sam sve ostale fajlove osim .cpp ali nesto ne radi. Javlja 'Bad dll calling convention'. Inace compile i build prolaze.
U vb-u deklaracija je ovakva :

Private Declare Function brrazlicitih Lib _
"c:windowsdesktoproundme.dll" _
(ByRef niza As Any, ByRef niza As Any, ByVal koliko As Long) As Long

.cpp izgleda sada ovako (kako si i napisao) :

#define STRICT
#include <windows.h>

HINSTANCE hInst ; //dll's instance handle ' jel ovo treba da ostane ?

extern "C" __declspec(dllexport) int brrazlicitih(int* niza, int* nizb, int koliko)

{

int j = 0;
int vraca = 0;

for (j = 0; j < koliko; j++)
{
if ( niza[j] != nizb[j] )
vraca++;
}

return vraca;
}


Uh, zaboravio sam na calling convention. Prepravi deklaraciju na

extern "C" __declspec(dllexport) int WINAPI brrazlicitih(int* niza, int* nizb, int koliko)

ili

extern "C" __declspec(dllexport) WINAPI int brrazlicitih(int* niza, int* nizb, int koliko)

(zaboravio sam gde tačno ide WINAPI, iskren da budem). U svakom slučaju pogledaj onaj sajt na koji sam ti ostavio link gore. Tamo detaljno objašnjavaju kako da napraviš dll. Jedino što koriste .def fajl, a ne __declspec(dllexport) za eksportovanje funkcija. Ako ne ide, javi da probunarim malo.

A
HINSTANCE hInst ;
ti ne treba
 
Odgovor na temu

jc denton

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



Profil

icon Re: VB i VC++ DLL 22.02.2002. u 04:30 - pre 240 meseci
Citat:
Dragi Tata:

Uh, zaboravio sam na calling convention. Prepravi deklaraciju na

ti ne treba


Nije bilo do onog 'WINAPI' nego sam malo kombinovao pa je proradilo (valjda sam vratio .def ili .h fajl ili oba...)

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 22.02.2002. u 15:54 - pre 240 meseci
Vratio si .def fajl. Onda ti ne treba ni declspec
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
..ndg-pm4-1.dialup.nethere.net



+6 Profil

icon Re: VB i VC++ DLL 24.02.2002. u 18:23 - pre 240 meseci
Nego, kako to misliš "nije bilo do onog WINAPI" ? Siguran sam da jeste i da će da proradi ako ubaciš WINAPI na pravo mesto, čak i bez def fajla.

Uostalom, ako ti već radi, nema veze :)
 
Odgovor na temu

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

Strane: 1 2

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

Postavi temu Odgovori

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