Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с PChar средствами Windows (API) [D2005, XP]


Страницы:   1 2 3

Max_2006 ©   (2006-11-05 12:38:00) 

как работать с PChar в Delphi средствами Windows, т.е. API? Т.е. надо например воспользоваться API функцией GetSystemDirectory, что делать если после ее выполнения нужно выполнить что-то вроде SetLength(p, Length(p)); т.е. длина строки ранв MAX_PATH, после выполнения функции GetSystemDirectory, как обрезать строку?

var
 p: PChar
begin
 GetMem(p, MAX_PATH);
 GetSystemDirectory(p, MAX_PATH);

...
 FreeMem(p);

Работу со String и ShortString не предлагайте...


Leonid Troyanovsky   (2006-11-05 14:03:00) [41]


> Max_2006   (05.11.06 12:38)  

>  GetMem(p, MAX_PATH);
>  GetSystemDirectory(p, MAX_PATH);


var
 a: array [0..MAX_PATH] of Char;
 p: PChar;
 n : Longint;
 ..
 n := GetSystemDirectory(a, MAX_PATH);
 Win32Check(n <> 0);
 p := StrAlloc(n);
 StrCopy(p, a);
 ..

--
Regards, LVT.


sniknik   (2006-11-05 14:02:00) [42]

> хотел бы сделать приложение максимально эффективное...
а как думаешь делается обрезание по SetLength? выделением нового куска памяти и копированием туда отрезанной части. это эффективно?

хотелось бы тогда получить определение эффективности, что для тебя важнее ресурсы или быстродействие, т.к. с точки зрения быстродействия эффективнее было бы раз отрезать кусок памяти и пользоваться им не перераспределяя т.к. это долгая операция (с другой стороны дельфя уже сделала эту работу за нас, ее менеджер памяти выделяет блок, а после раздаёт кусочки без запросов от системы, если не вылезти за пределы конечно...)
ну и получается ты со своим полным незнанием работы системы хочешь написать эффективнее чем борланд, обходя то что он встроил? думаешь получится?
я вот сомневаюсь.
ну ладно, пусть решили что оставить размер как есть эффективнее (не будем память экономить, переключимся на быстродействие), но в показанном куске есть подозрение используется локальная переменная(!!!) это значит что при передаче она либо потеряется либо мы ее должныбудем скопировать в другую с другой областью видимости, а это эффективно?, но тем не менее по другому нельзя и получается все ранние потуги насмарку...

уффф..., ещё не начал объяснять а уже упарился... все таки вам проще книжечку/лекции взять почитать... потому как однозначных ответов нет.

и самое главное, все это, то что ты делаешь думая что оптимизация...,  на самом деле называется "экономия на спичках", за счет указателей, сдвигов, самостоятельных учетов блоков памяти, выиграть можно не более 5% скорости (испортить и сделать медленнее гораздо проще и вероятнее) чем если следовать стандартам (где уже все продумано), а вот на логике приложения можно выиграть на порядки (200%/1000%), если решать задачу а не проблемы выбранного пути решения... но почему то о ней не задумываются.


Dmitry_177   (2006-11-05 13:14:00) [43]

Вопрос схожий с моим ))) Но всеравно, хотел бы получить на него ответ...)))


Dmitry_177   (2006-11-05 13:12:00) [44]

Просто перед тем чтобы передать строку в API функцию, компилятов переводит ее из string в PChar или массив array of Char, на это тратится какое-то время, хотел бы сделать приложение максимально эффективное... Ну и вообще ради интереса...


sniknik   (2006-11-05 13:05:00) [45]

> Работу со String и ShortString не предлагайте...
тогда предлагаю работать с массивом of char;...

p.s. интересно, а откуда берутся, в примерно в одно время, кучи однотипных вопросов, причём с примерно одинаковым незнанием тех же основ разными(???) авторами. и с примерно одинаковым стилем... без малейшего намёка на "зачем", только с "надо вот так" + какие то надуманные ограничения...

==================================
- мама скажи "абырхвал".
- зачем?
- ну скажи!
- нет, ты скажи что это значит и зачем.
- ну мам!
- да не буду я всякую непонятную ерунду говорить.
- ВОТ!!! и меня тогда не заставляйте английский учить!


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо