[ Dark Icarus @ 07.12.2004. 17:06 ] @
Bas super sto sam naišao na ovu temu, ne moram da postavljam novu. U vezi sa sajtom http://codechallenge.4t.com/ pominje se programiranje ai dll-a. Pa k'o velim i ja da se oprobam. Ali ne lezi vraže!

U dllu (koji ja nameravam da napravim u VBu), pominje se procedura:
int TableSetupMoves(int n, int* arr);

U suštini, glavni program poziva ovu proceduru iz mog DLLa, prosleđujući mu 2 argumenta. Prvi argument govori koliki je niz koji pristiže u drugom argumentu.

E sad, koliko se sećam postoje neka ograničavajuća pravila u vezi sa komunikacijom VBa sa dll-ovima, a posebno vezano za nizove i pointere. A ovde, koliko ja umem da sričem C++, imamo pointer na niz! Kao prvo, koliko se sećam, C++ obrnuto procesuje nizove od VBa (jedan je filo, drugi je fifo tip čitanja), da li je ovo istina ili sam se istripovao? Kao drugo, (ovo je pre pitanje za C++ forum ali šta sad), ovoj funkciji TableSetupMoves(int n, int* arr) program prosleđuje šta tačno za drugi argument? Pointer na niz? Šta će moj dll da primi, gledano u VB merilima? Long varijablu koja pokazuje fizičku adresu prvog člana niza? Ako je tako, kako onda ja da nateram VB da pristupi nizu na toj adresi?

Pa, zna li neko ima li rešenja za moje probleme ili moram da zasučem rukave i napišem dll u mrskom mi neprijatelju C++u?
[ Dark Icarus @ 07.12.2004. 17:09 ] @
I jedno malo izvinjenje. Očigledno sam postavio novu temu... :P
Ovaj post je originalno trebao da se nastavi na thread "komunikacija sa dll-om"... pa pošto ja ne mogu da je pomerim evo neka to uradi admin.

Pozdrav
[ mladenovicz @ 07.12.2004. 17:40 ] @
Kad funkcija iz API DLLa prima kao parametar niz, iz VBa se prosledjuje prvi element, tj. pointer na array.
[ Dark Icarus @ 07.12.2004. 18:22 ] @
Hvala, ali meni treba rešenje za obrnutu situaciju. Znam da je malo konfuzna tema, pa idemo po stavkama.

- Master program je u c++u, on je taj koji poziva dll, a dll je pisan u Visual Basicu.
- Exe (pisan u c++u) prosleđuje pointer na array Dllu (pisanom u VBu).
- Kako ja da u Dllu pretvorim taj pointer u niz kada očigledno jedina informacija koja dolazi od Exe-a očigledno predstavlja adresu prvog člana niza, a ja sa adresom u VBu (koliko znam, a možda i grešim) ne mogu ništa da uradim.
[ Aleksandar Ružičić @ 07.12.2004. 21:17 ] @
Evo ja samo da se nadovezem na ovo pitanje jer sam i ja razmisljao da se bacim na AI (jer nisam dosad to radio), samo sam imao problema da "svarim" istu tu f-ju, ona treba da ti da broj random neutralnih loptica koje se nalaze na playfield-u i njihov raspored, ako ja nisam nesto pogresno shvatio...

Evo, da dodam:
Citat:

NAPOMENA: Za postavljanje početnih neutralnih kuglica potrebno je eksportovati drugu funkciju:


int TableSetupMoves(int n, int* arr);

Vrednost argumenta n predstavlja broj neutralnih kuglica koji je računar odabrao da postavi pre početka partije. Tačnije, to je broj poteza koje će računar odigrati sa neutralnim kuglicama davanjem brojeva kolona, i njihovo postavljanje treba vršiti analogno odigravanju regularnog poteza. Pokazivač na mestu drugog argumenta upravo prestavlja niz tih poteza, dakle brojeva kolona u koje treba postaviti neutralne kuglice. Radi kontrole, funkcija treba da vrati zbir brojeva kolona koji je primila.

Postavljanje početnih kuglica će se uvrstiti u pravila najranije na četvrtom turniru. Do tada se neće proveravati postojanje druge eksportovane funkcije.
[ Shadowed @ 08.12.2004. 12:00 ] @
Mislim da ti to nece biti jedini problem. Koliko su meni rekli u VB-u nije moguce praviti C exportovane funkcije (a rekao bih da ti upravo to trebas da uradis).
[ Dark Icarus @ 08.12.2004. 13:17 ] @
@Shadowed
Pa apsurdno bi bilo da ne mogu da komuniciram izmedju 2 programska jezika putem DLLova, zar nije to jedna od stvari zbog koje dll-ovi postoje i zar nisu oni svi već kompajlirani kada se pozivaju?

U trenutku egzekucije dlla stvar je čistog protoka podataka od programa do dll-a, znači mene interesuje protok bajtova, koje bajtove prima moj dll. Inače bih verovatno sam sklepao neku kućnu probu, ali nisam u stanju to da uradim još jedno 2 nedelje...

@krckoorascic
i da, u pitanju je onaj ai program :)
[ mladenovicz @ 08.12.2004. 13:27 ] @
U VBu ne mzoes da pravis API DLLove, samo ActiveX.
[ Aleksandar Ružičić @ 09.12.2004. 23:57 ] @
Da li se:
Code:

int TableSetupMoves(int n, int* arr)

definicija f-je u C++u i u Vb-u pise ovako:
Code:

Function TableSetupMoves(n As Integer, i() As Integer) As Integer

???