Chciałem sobie stworzyć ten program http://cyfbar.republika.pl/api3.html#api3 a dokładnie "Sprawdzanie zużycia pamięci przez procesy uruchomione w systemie" przy próbie uruchomienia wyskakuje mi błąd
if(!AnsiString(WindowName).IsEmpty())
if(*WindowName != '\0')
TStrings nie ma takiej właściwości jak Items
Ja nawykłem korzystać kiedy to tylko możliwe ze zmiennych AnsiString dlatego często konwertuję typ char na typ AnsiString.
bool CALLBACK EnumWindowsProc(HWND hWnd, TStrings *EnumList)
{
char WindowName[255];
DWORD ID;
GetWindowText(hWnd, WindowName, 255);
GetWindowThreadProcessId(hWnd, &ID);
AnsiString win_name(WindowName); //<--- TU
if(!win_name.IsEmpty())
{
if(IsWindowVisible(hWnd) >= 1)
{
String tmp = win_name + " - " + GetMemory(ID);
if(EnumList->IndexOf(tmp) < 0) EnumList->Add(tmp);
}
}
return true;
}
Items jest typem TStrings.
tylko po jaką cholerę tworzyć dodatkową zmienną tam gdzie nie jest ona konieczna
Z trzech konwersji WindowName na AnsiStringa mamy tylko jedną
tylko dodatkowa zmienna nie jest tworzona.
Ja sobie tego nie wymyśliłem, tego typu konwersje są często spotykane w książkach poświęconych temu językowi.
vector<string> vec;
const char* p1 = "abcd 1234 abcd";
const char* p2 = p1 + strlen(p1);
const char* p3;
/* Tu sobie parsuje tekst */
while(p1 != p2 && !isdigit(*p1))++p1;
p3 = p2;
while(p3 != p2 && isdigit(*p3))++p3;
/*** teraz do vectora muszę dodać wycinek tekstu określony przez p1 i p2 ***/
vec.push_back(string(p1,p3));
Powrót do Ogólne problemy z programowaniem
Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 12 gości