Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1189450087
Andy BitOff
2007-09-10 22:48
2007.10.07
Не стирает привод, HL-DT-ST DVDRAM GSA-H42L (LG)


6-1171007451
inex
2007-02-09 10:50
2007.10.07
работа с IdFTP


2-1189508158
Korneley
2007-09-11 14:55
2007.10.07
Неясности с отрисовкой SubItem у ListView


15-1189053276
ZeroDivide
2007-09-06 08:34
2007.10.07
Turbo вернулись.... и снова пропали, я правильно понял?


15-1189253128
OzoM
2007-09-08 16:05
2007.10.07
Срочно!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский