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

Iz __gc String u char *

[es] :: .NET :: Iz __gc String u char *

[ Pregleda: 2946 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.smin.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Iz __gc String u char *12.11.2006. u 19:31 - pre 180 meseci
Uradim ovo:
__gc String *text = new String("neka poruka");

E sad,ako da se izvrsi konverzija iz String u char * ? Jasno je da ovo nece raditi:
char a[] = text;
Ali sta treba da napisem da bi ovo moglo da radi?

Ako me niste razumeli, koristeci string klasu "obicnog" C++ to bi izgledalo ovako:
string text = "neka poruka";
char a[] = text.c_str();

Dakle, meni treba takva konverzija( u niz char-ova) samo sto umesto string klase treba da bude String klasa( MC++ )...
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.adsl.net.t-com.hr.

Sajt: www.dump.hr


Profil

icon Re: Iz __gc String u char *12.11.2006. u 21:32 - pre 180 meseci
Pisano je u C++/CLI, ali sigurno ces se snaci.
Code:
string ConvertStringToStdString( System::String* s )
{
    System::IntPtr pp = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi( s );
    string str( (const char*)pp.ToPointer() );
    System::Runtime::InteropServices::Marshal::FreeCoTaskMem( pp );
    return str;
};
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.rcub.bg.ac.yu.



+9 Profil

icon Re: Iz __gc String u char *13.11.2006. u 15:07 - pre 180 meseci
S tim sto mislim da bi ipak trebalo da pinuje taj String na hipu kako ranije pokazivac ne bi prso...:) Ili...u tom trenutku odmah moze da kopira string, jer je GC poseban thread i moze da 'obavi' premestanje u toku koriscenja interior pointera, ili se varam? :)
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.adsl.net.t-com.hr.

Sajt: www.dump.hr


Profil

icon Re: Iz __gc String u char *13.11.2006. u 15:26 - pre 180 meseci
Ne razumim te.
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.smin.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: Iz __gc String u char *13.11.2006. u 18:45 - pre 180 meseci
@NrmMyth
da, snasao sam se.Doduse moram priznati da mi je nacin na koji ovo funkcionise stran :) Ali ima vremena, naucicu...
U svakom slucaju, hvala veliko! Pozdrav.
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.adsl.net.t-com.hr.

Sajt: www.dump.hr


Profil

icon Re: Iz __gc String u char *13.11.2006. u 20:02 - pre 180 meseci
Ukratko.
String koji boravi na GC (manged) heapu funkcijom StringToHGlobalAnsi() prebacis na nativni heap u raw ANSI formatu (C string, ako ti je ovako blize). Ona vraca pokazivac na taj niz.
Konstruktoru za std::string prosljedis taj char pointer i tim dobijes samostalni, recimo C++, string.
Na kraju oslobodis memoriju sa FreeCoTaskMem() koju je StringToHGlobalAnsi() zauzeo na nativnom heapu (moras se sam pobrinit za ovo, mozda cak i ne moras, ali moram poviriti u dokumentaciju).

Pozdrav.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
65.213.80.*



+6 Profil

icon Re: Iz __gc String u char *13.11.2006. u 20:11 - pre 180 meseci
Citat:
NrmMyth: Na kraju oslobodis memoriju sa FreeCoTaskMem() koju je StringToHGlobalAnsi() zauzeo na nativnom heapu (moras se sam pobrinit za ovo, mozda cak i ne moras, ali moram poviriti u dokumentaciju).


Moraš, ali ne FreeCoTaskMem, nego Marshal::FreeHGlobal

Inače, jedan tip je na Code Project-u napisao neku klasu za ovakva konvertovanja (C++/CLI), mada mi nije jasno šta će mu klasa, kad bi neke šablon funkcije tu bolje obavile posao, ali ajd sad.
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.adsl.net.t-com.hr.

Sajt: www.dump.hr


Profil

icon Re: Iz __gc String u char *13.11.2006. u 21:37 - pre 180 meseci
Citat:
Dragi Tata: Moraš, ali ne FreeCoTaskMem, nego Marshal::FreeHGlobal

Ne mogu vjerovati kako mi se ovo desilo... cudno... kao da sam bio corav...
Hvala na zapazanju. :)

Citat:
Inače, jedan tip je na Code Project-u napisao neku klasu za ovakva konvertovanja (C++/CLI), mada mi nije jasno šta će mu klasa, kad bi neke šablon funkcije tu bolje obavile posao, ali ajd sad.
Prvo sta mi padne na pamet je bolja kontrola memorijom s klasom. Moze cuvati memoriju koliko zeli i osloboditi je kako zeli i kad.
 
Odgovor na temu

[es] :: .NET :: Iz __gc String u char *

[ Pregleda: 2946 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

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