Форум: "Начинающим";
Текущий архив: 2007.10.07;
Скачать: [xml.tar.bz2];
ВнизГлюк с массивом PCHAR Найти похожие ветки
← →
PIG (2007-09-07 11:05) [0]обьявлено
List: array [0..5] of PCHAR
Count:byte=0; // количество
temp:string[244];
загрузка
Count:=0;
temp:="test";
List[Count]:=PCHAR(temp);
showmessage(List[Count]); // проверка все правельно
в другом потоке после загрузки массива
for b:=0 to Count do begin
P:=List[b];
s2:=String(P); // PCHAR to string
showmessage(p);
showmessage(s2);
end;
показывают пустой бокс - текста в массивах нет
← →
clickmaker © (2007-09-07 11:08) [1]нихрена не понятно.. что это за код? что он делать должен?
← →
Сергей М. © (2007-09-07 11:17) [2]
> в другом потоке
> showmessage(
Вызов ShowMessage в доп.потоке недопустим !
← →
PIG (2007-09-07 12:22) [3]код сохраняет в массив строки в PCHAR так как
List: array [0..5] of string теоретически много памяти ест
поток соотвественно читает массив
To Сергей М
все нормально в оригинале MesTest(s:string)
я просто чтоб понятно заменил на лету
реализация MesTest(s:string) с помощью MessageBox(0, ...
← →
icWasya © (2007-09-07 12:26) [4]А кстати. Если даже без дополнительных потоков сделать так
List: array [0..5] of PCHAR
Count:byte=0; // количество
temp:string[244];
b:byte;
S2:String;
P:PChar;
......
Count:=0;
temp:="Ноль";
List[Count]:=PCHAR(temp);
Count:=1;
temp:="Один";
List[Count]:=PCHAR(temp);
Count:=2;
temp:="Два";
List[Count]:=PCHAR(temp);
for b:=0 to Count do begin
P:=List[b];
s2:=String(P); // PCHAR to string
showmessage(p);
showmessage(s2);
end;
то результат Вас удивит
showmessage(List[Count]); // проверка все правельно
← →
Riply © (2007-09-07 12:30) [5]> [4] icWasya © (07.09.07 12:26)
:)
← →
PIG (2007-09-07 13:25) [6]если бы) поток должен работать все время выполнять работу
еще информация
тоесть присваивание есть явное
Count:=2;
List[0]:="TEST0";
List[1]:="TEST1";
MesTest(List[0]); //проверка работает
MesTest(List[1]); //проверка работает
CreateThread(nil,0,@revien,0,0,d); // поток чтоб немешать
------в потоке переменные исчезают----------------------
procedure revien;stdcall;
begin
MesTest(List[0]); // выдает пустое окно куда исчезла информация
MesTest(List[1]); // выдает совершенно левый текст,как будто указатели PCHAR левые
Count выдает 2 - правельно
-----------------------------------
procedure MesTest(Text:string);
begin
MessageBox(0,PChar(Text),"debug",0);
end;
← →
clickmaker © (2007-09-07 13:28) [7]
> List[0]:="TEST0";
List - глобальный объект
"TEST0" - локальная константа, живет только внутри функции
Если нужно получить массив указателей, то
List[0] := StrAlloc(6);
StrCopy(List[0], "TEST0");
← →
Palladin © (2007-09-07 13:29) [8]где объявлен List и случаем не как threadvar?
← →
PIG (2007-09-07 14:36) [9]как обычно в глобально в начале модуля
uses forms,...
var
List: array [0..5] of PCHAR
Count:byte=0; // количество
temp:string[244];
← →
PIG (2007-09-07 16:38) [10]проблему решил обьявлением
как обычно List: array [0..5] of string
незнаю много ли жрет памяти примерlist[0]:="1";
list[1]:="1";
list[2]:="1";
list[3]:="1";
list[4]:="1";
list[5]:="1";
поидее 6 байт должно занимать - фактически может 255*6 байт
хоть и рекомендуют обьявлять PCHAR как на C++
убедился в Делфи с ними много граблей
бесконечные переводы,чтоб согласовать
(CompartText,pos итд принимает только string)
← →
Юрий Зотов © (2007-09-07 18:44) [11]> PIG (07.09.07 16:38) [10]
> незнаю много ли жрет памяти пример
Объявление List жрет 24 байта в статической памяти (6*4=24).
Каждая строка примера жрет 10 байт в динамической памяти (4+4+1+1=10).
Итого - 84 байта.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.10.07;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.035 c