![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с PChar средствами Windows (API) [D2005, XP]
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. интересно, а откуда берутся, в примерно в одно время, кучи однотипных вопросов, причём с примерно одинаковым незнанием тех же основ разными(???) авторами. и с примерно одинаковым стилем... без малейшего намёка на "зачем", только с "надо вот так" + какие то надуманные ограничения...
==================================
- мама скажи "абырхвал".
- зачем?
- ну скажи!
- нет, ты скажи что это значит и зачем.
- ну мам!
- да не буду я всякую непонятную ерунду говорить.
- ВОТ!!! и меня тогда не заставляйте английский учить!