Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2011, 18:33   #21
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

правильно потму что эту функция я показал тебе несколькими постами ранее..
Код:
function GetWindowsDir:string;
var
  WinPath:array[1..255] of Char;
begin
  GetWindowsDirectory(@WinPath,SizeOf(WinPath));
  Result:=IncludeTrailingPathDelimiter(StrPas(@WinPath));
end;
А вы вообще вкурсе что такое string и что такое PChar?

Советую почитать вот этот материал:
http://www.transl-gunsmoker.ru/2009/09/pchars.html
Человек_Борща вне форума Ответить с цитированием
Старый 23.07.2011, 18:35   #22
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Только что это хотел сказать насчет добавления этой функции GetWindowsDir в проект)))
Aliens_wolfs вне форума Ответить с цитированием
Старый 23.07.2011, 18:39   #23
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

Читал и знаю... а теперь ты мне обьясни как ты понимаешь функцию SetLength()
cargo29 вне форума Ответить с цитированием
Старый 23.07.2011, 18:43   #24
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

SetLength выделяет размер строковому параметру память на низком уровне, а для Pchar нужно выделять память верхнего уровня, а
WinPath: array[1..255] of Char - статическая переменная низкого уровня поэтому параметру string передается без потери

Последний раз редактировалось Aliens_wolfs; 23.07.2011 в 18:50.
Aliens_wolfs вне форума Ответить с цитированием
Старый 23.07.2011, 18:53   #25
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

Цитата:
Сообщение от Aliens_wolfs Посмотреть сообщение
SetLength выделяет размер строковому параметру память на низком уровне, а для Pchar нужно выделять память верхнего уровня, а
array[1..255] of Char - статическая переменная низкого уровня
ТОгда получаеться что в книге не правильно написано? Очень интересно... она выделяет память под сиволы, и она выводила правильный путь .... почему же когда она вывела путь она не даписывала? +'ЧуШЬ'
cargo29 вне форума Ответить с цитированием
Старый 23.07.2011, 18:54   #26
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

я до этого всегда так пользовался и всегда работало нормально а тут вошло в ступор
cargo29 вне форума Ответить с цитированием
Старый 23.07.2011, 18:57   #27
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

wi:=win+'\svchost.exe';
Edit2.Text:=wi;

wi это что за параметр и где он описывается?
Aliens_wolfs вне форума Ответить с цитированием
Старый 23.07.2011, 18:58   #28
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

Вот работает так а почему не работало ... Char может принимать только 255 символов

поэтому я и указывал 255

Код:
function wins: string;
var a:string; 
begin
SetLength(a, 255);
GetWindowsDirectory(Pchar(a), MAX_PATH);
Result:=a+'dsadsada';
end;
cargo29 вне форума Ответить с цитированием
Старый 23.07.2011, 18:58   #29
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

там глобальная переменная типа string
cargo29 вне форума Ответить с цитированием
Старый 23.07.2011, 19:05   #30
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Цитата:
ТОгда получаеться что в книге не правильно написано? Очень интересно... она выделяет память под сиволы, и она выводила правильный путь .... почему же когда она вывела путь она не даписывала? +'ЧуШЬ'
+'ЧуШ она дописывает но после символа #0 все что после этого сивола в строковых параметрах неотображается но память останится 255 тот который задали

И возможно путь у вас и отобразился с этим #0 символом на конце и после него Edit2 и неотобразил дальнейшую информацию,
строка получилась так: C:\Windows#0\svchost.exe все что за символом #0 неотобразилось в вашем Edit2

Вообще я сам стараюсь обходиться без статических размеров, переход за границы статического размера будет выдавать ошибку либо дописываться #0 на конце если размер больше строки, тогда дольнейшая информация неотобразиться. Нужно отсекать лишнее задавать дважды размер первый большой, второй по строке,
как показано в нижнем примере.


Можно сделать проще передача строки сразу без переменных, кто запрашивает тот и переменная
Код:
 function win():string;
begin
//Задаем большой размер
 SetLength(result, $FFFF);
//Затем из этого размера делаем размер который извлекается из GetWindowsDirectory, тогда размер становится нужным по извлеченной строке
 SetLength(result, GetWindowsDirectory(PChar(result), $FFFF));
end;

Edit2.Text:= win+'\svchost.exe';

Последний раз редактировалось Aliens_wolfs; 23.07.2011 в 19:53.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тестовый файл. Найти сумму всех чисел, входящих в этот файл. (Паскаль) Homeros Помощь студентам 1 26.01.2011 14:05
Типизированный файл с натуральными числами. Числа, встречающиеся 1 раз переписать в другой файл [Паскаль] mifomen Помощь студентам 7 16.12.2010 22:00
WinInet загрузить файл во временной файл , использовать, потом удалить Человек_Борща Работа с сетью в Delphi 5 03.08.2010 13:46
C++. Прочитать файл и вывести в другой файл каждую N-ую строку Straiker Помощь студентам 3 15.12.2009 05:49
Ссылка на файл из текущей папки! Сбор инфы в один файл! mephist Microsoft Office Excel 11 10.07.2009 13:51