In article <k6ash5$fp4$
1...@ls237.t-com.hr>, Bruno Babic <a@b.c> says...
> 29: tocka_rute tocke[] = new tocka_rute[broj_tocaka_rute];
>
> Ovo ce ti deklarirati tocke kao managed array. Nisam bas siguran da sam
> shvatio sto hoces.
>
> I ti bi sad htio napraviti memcpy iz buffer_dyn tako da prepises jedan
> element onog gore arraya?
>
Htio bih reproducirati isto sta radi ovaj program na kojeg sam dao
link:
http://codepad.org/WlTRv0cw
ali u C++/CLI Win Forms .NET aplikaciji.
Problem je da ne znam deklarirati unmanaged struct (ne znam niti da li
je to moguce) unutar managed koda. Ako bi mogo koristiti unmanaged
struct-ove, array-e i pointere, onda bi ovaj program radio bez ikakvih
preinaka. Medjutim ako probam deklarirati 'normalan' unmanaged struct,
compiler javlja:
error C2814: a native type cannot be nested within a managed type
ili
error C3923: local class, struct or union definitions are not allowed
in a member function of a managed class
u ovisnosti gdje ga pokusam deklarirati.
Program iz buffer_dyn u kojem je cijeli binarni file, s mjesta na
odredjenom offset-u s memcpy direktno u struct (koji je u array-u)
ubacuje 32 byte-a koji se tocno poklope s odgovarajucim variablama
unutar struct-a (s hex editorom sam provjerio da zapisi odgovaraju).
Program radi - ako stisnes fork pa npr. u liniji 20 umjesto 0x1e stavis
neki drugi broj i stisnes RUN, onda se moze vidjeti da ce se s memcpy
taj broj upisati upravo na poziciju LSB-a variable int brzina unutar
struct-a i u liniji 35 se ispravno ispisati kao tocke[0].brzina.
Trebalo bi mi da taj program, takav kakav je, mogu skompjlirati unutar
C++/CLI Win Form aplikacije - ali to ne mogu postici jer ne znam kako
da deklariram native struct, pa trazim neki workaround. Zbog toga sam
bio prisiljen deklarirati managed struct (s 'ref' i zato sam s
array<tocka_rute^>^ tocke = gcnew array<tocka_rute^>(broj_tocaka_rute);
pokusao deklarirati managed couterpart od
tocka_rute *tocke = new tocka_rute[broj_tocaka_rute];
ali nisam znao sta dalje.
Najsretniji bi bio kad ne bi ni trebao deklarirati managed struct nego
da mogu deklarirati 'obicni'.
To mi treba jer u file-u kojeg cu konvertirati ima nekoliko struktura
(indexi tocaka - nesta ko TOC, zaglavlja svake rute, podaci o svakoj
tocki rute - to je ovaj struct kojeg sam stavio za primjer, ...).
File kojeg cu kreirati ce sadrzavati iste informacije ali u drukcijim
blokovima podataka (neki float-i ce biti double-i i podaci su
organizirani malo drukcije).
Cilj mi je binarni file iz buffer-a po blokovima ucitavati u
odgovarajuce struct-ove, na osnovu procitanog puniti struct-ove koji
odgovaraju izlaznom file-u, puniti izlazni buffer, i na kraju izlazni
buffer upisati u file na disk-u.
Kad bih radio u 'obicnom' C++ sve bi vec bilo rijeseno ali ovako, s
obzirom da zelim napraviti Win Forms app, se je pojavio ovaj opisani
problem. Znaci, zelim da ovaj kod (ili njegov ekvivalent) s gornjeg
ilinka, koji inace radi tocno ono sta zelim, proradi u C++/CLI Win
Forms .NET aplikaciji.
--
Chupo