Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 4.762 pregleda

Najnovija ↓

Iz __gc String u char * 12.11.2006. u 20:31 · pre 243 meseca #1
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++ )...
Potpis
Expert Opinions - Niche Articles
Re: Iz __gc String u char * 12.11.2006. u 22:32 · pre 243 meseca #2
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;
};
Re: Iz __gc String u char * 13.11.2006. u 16:07 · pre 243 meseca #3
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? :)
Re: Iz __gc String u char * 13.11.2006. u 21:02 · pre 243 meseca #6
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.
Re: Iz __gc String u char * 13.11.2006. u 21:11 · pre 243 meseca #7
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.
Potpis
IOCC
Re: Iz __gc String u char * 13.11.2006. u 22:37 · pre 243 meseca #8
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.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme