Użyj funkcji c_str(), która należy do klasy AnsiString. Poniżej kilka przykładów.
// Przekazywanie Stringu do okienka message box AnsiString str = "Taki mały test!"; Application->MessageBox(str.c_str(), "AnsiString do char *", MB_OK); // Przekazywanie Stringu do funkcji API RECT p; RECT * rect = &p; p.left = 20; p.right = 100; p.top = 20; p.bottom = 50; ::DrawText(Canvas->Handle, str.c_str(), str.Length(), rect, DT_VCENTER);Uwaga 1: c_str jest funkcją inline. Jej kod ujawnia, że zwraca ona wskaźnik do wewnętrznego wskaźnika AnsiString - char *.
// Data jest typu char * i należy do AnsiString char* __fastcall c_str() const {return (Data)? Data: "";} Ten kod odpowiada następującemu:
char* __fastcall AnsiString::c_str() const { if(Data != NULL) return (Data); else return NULL; }
Uwaga 2: Ponieważ c_str zwraca wskaźnik do danej wewnętrznej, możesz urzyć c_str, żeby zmodyfikować zmienną AnsiString. Przykłady:
// Ten przykład tworzy AnsiString i wypełnia go zerami AnsiString str; str.SetLength(50); // allokuje pamięć na 50 znaków memset (str.c_str(), 0,50); // wypełnia bufor zerami // Ten przykład przekazuje AnsiString do funkcji API, // która zapisuje do tego stringu. AnsiString str; DWORD size = 255; str.SetLength(size +1); // 255 znaków plus znak null GetComputerName(str.c_str(), &size) ;// wywołuje funkcję API
Uwaga: Uwaga 1 pokazuje, że c_str jest funkcją stałą. Oznacza to, że możesz wywoływać funkcję c_str dla stałych typu AnsiString. C++ nie pozwala na wywoływanie funkcji nie-const na rzecz stałych obiektów klasy. Poniższy kod nie skompilowałby się, gdyby Borland nie umieścił słowa kluczowego const w deklaracji metody c_str.
const AnsiString str = "Znowu teścik!"; Application->MessageBox(str.c_str(), "",MB_OK); // błąd, wywołanie funkcji nie-const // na obiekcie const
Uwaga 4: Prawie zawsze będziesz wywoływał funkcję c_str używając kropki ".", a nie wskaźnika "->". To samo dotyczy właściwości typu AnsiString komponentów VCL. Kiedy kontrolka VCL ma taką właściwość, metoda Get dla tej właściwości zwraca nowy obiekt AnsiString przez wartość. I dlatego właśnie używasz kropki. |