Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.07;
Скачать: CL | DM;

Вниз

Глюк с массивом 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
2-1189330007
Dmitriy_
2007-09-09 13:26
2007.10.07
Глюки при копировании. Что я делаю не так?


3-1180574507
Sapos
2007-05-31 05:21
2007.10.07
Blob поля


2-1189486797
no_name
2007-09-11 08:59
2007.10.07
Как поместить созданный мной компонент в список ActiveX


1-1185652576
click
2007-07-28 23:56
2007.10.07
плавный скроллинг TScrollBox


2-1189177170
Irish
2007-09-07 18:59
2007.10.07
Архиваторы.Увеличение скорости