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

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

Получение EnvironmentStrings среды.


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

Riply ©   (2009-03-23 09:32:00) 

Здравствуйте !

Задача такая:
при обычном старте приложения получить(создать)
такой же EnvironmentBlock, как и при запуске из под среды.
На руках имеем только путь в реестре к данной среде, например 'Software\Borland\BDS\4.0\';

Дело в том, что при обычном старте не удается "проэкспандить", например, строку такого вида:
'%BDS%\lib;%BDSUSERDIR%\Imports;%BDS%\Imports;%BDS%\Lib\Indy10;%BDSCOMMONDIR%\Dcp;%BDS%\include;%BDS%\RaveReports\Lib'
что при работе из под среды проходит на ура :)
Т.е. нам надо получить как значения данных переменных, так и их имена (например BDSUSERDIR).

Если бы нам удалось создать этот блок, то мы могли бы спокойно "экспандить"
нужные нам пути, хотя бы с помощью RtlExpandEnvironmentStrings_U, которая первым параметром
может принимать данный блок (если я все правильно понимаю)

Порбовала поступать так:
находим DCC32.EXE соответствующей среды, запускаем его в SUSPENDED режиме
и "вытаскиваем" из него его EnvironmentBlock.
Я расчитывала на то, что раз он умеет собирать проекты, то должен и уметь "экспандить".
Меня постигла неудача: его блок не содержит необходимых переменных.

Есть еще интересный с этой точки зрения файл: CodeGear\RAD Studio\6.0\bin\rsvars.bat
с таким содержанием:
@SET BDS=C:\Program Files\CodeGear\RAD Studio\6.0
@SET BDSCOMMONDIR=C:\Documents and Settings\All Users\Documents\RAD Studio\6.0
@SET FrameworkDir=C:\WINDOWS\Microsoft.NET\Framework\
@SET FrameworkVersion=v2.0.50727
@SET FrameworkSDKDir=
@SET PATH=%FrameworkDir%%FrameworkVersion%;%FrameworkSDKDir%;%PATH%


но, с сожалению он присутствует не во всех версиях (например его нет в 2006)

Подскажите, пожалуйста, как еще можно извратиться для решения данной задачи ? :)

P.S.
Riply ворчит: наш форум так часто стал бывать "недоступным",
               что уже вопрос задать - целая эпопея.  :)


Игорь Шевченко   (2009-03-25 16:29:00) [21]


> Это единственная причина "сомнительности" ?


Нет, не единственная. Главная причина - это то, что такая функциональность есть в GExperts, ESSModel (вроде бы) и в продуктах Peganza. Причем все они бесплатны.

Красивые картинки никому не нужны, когда модулей становится больше 30 - собственно эту печальную картину я наблюдал только что, когда запустил на анализ проект, где половина юнитов не показывается - получил еще иллюстрацию на тему творчеста пауков.


Riply   (2009-03-25 16:09:00) [22]

> [30] Игорь Шевченко ©   (25.03.09 15:43)
>> Ну еще может быть если не смог найти правильный путь к PAS
>> файлу - тогда такие файлы не учитываются конечно.

>Ясно. К сожалению ценность такого инструмента мне представляется сомнительной.

Это единственная причина "сомнительности" ?
Дело в том, что она временная, ибо если проект
компилируется, то будут вытащены все юниты (я надеюсь). :)
А если не компилируется по причине "не найден файл", то и сам господь бог не поможет :)


Rouse_   (2009-03-25 15:58:00) [23]


> Для личного использования внутри конкретной компании - может
> быть, а для стороннего - нет смысла.

Так я и не планирую пока для внешнего, вот когда смогу заняться более плотно, тогда конечно и фукционал будет наращен соответствующим образом, благо сейчас Рипли помогает...


Игорь Шевченко   (2009-03-25 15:43:00) [24]

Rouse_ ©   (25.03.09 15:31) [29]


> Ну еще может быть если не смог найти правильный путь к PAS
> файлу - тогда такие файлы не учитываются конечно.


Ясно. К сожалению ценность такого инструмента мне представляется сомнительной. Для личного использования внутри конкретной компании - может быть, а для стороннего - нет смысла.


Rouse_   (2009-03-25 15:31:00) [25]


> Причем тут системные ? Оно половину не дельфийских юнитов
> не показывает.

Если они не используются (отключены DEFINE-ами) то конечно не покажет.
А так я смотрел на своих проектах (около 500 с чем-то модулей) все отображается... Ну еще может быть если не смог найти правильный путь к PAS файлу - тогда такие файлы не учитываются конечно.


Rouse_   (2009-03-25 15:29:00) [26]


> atruhin ©   (25.03.09 15:17) [26]

Не это строка, у меня там не закочен правильный рассчет ошибочной позиции.

Вот кусочек кода:

       #13:
       begin
         { TODO : Небольшой, но не критичный глюк,
           при вызове ClearNotUsedData не учитываются переводы каретки,
           поэтому при возникновении ошибки указываются неверные
           CurrentLine и CurrentPos.
           Вероятно их придется рассчитывать в динамике при вызове DoError}
         CurrentPos := 0;
         Inc(CurrentLine);
       end;

..

       '/': // убираем все коментарии вида // bla..bla
       if NextChar(ACursor) = '/' then
       begin
         APos :=
           PosByte(13, PByte(ACursor), 1, FFileSource.Size - I);
           //Pos(#13, ACursor);
         if APos = 0 then
           DoError(CurrentLine, CurrentPos, '#13');
         ClearNotUsedData(ACursor, I, APos - 1);
         Continue;
       end;


Такое может быть если у тебя разделителzvb между строк используется не полноценный CaretReturn + LineFeed а только LineFeed т.е. #10. или только CaretReturn #13

Кстати если такое проявляется, то в этом модуле плывут точки останова.
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1025

Дай сам файлик pngimage - посомтрю где падает.


Игорь Шевченко   (2009-03-25 15:28:00) [27]


> Системные не показывает, задача была написать утилитку для
> фнутреннего рефакторинга, чтобы понять откуда унас цепляются
> ненужные модули, которых по логике вещей в конечном проекте
> быть не должно.
>
> Поэтому все дельфевые юниты я не показываю.


Причем тут системные ? Оно половину не дельфийских юнитов не показывает.

И еще - у Icarus есть крайне полезная фича - оно показывает, нужен ли uses конкретного модуля в интерфейсной части или его можно смело перенести в implementation, а также нужен ли uses модуля вообще или это следы предыдущей распущенной жизни.

А просто, кто что использует - это и в GExperts есть.


atruhin   (2009-03-25 15:17:00) [28]

Выдает
---------------------------
Unitweb
---------------------------
Ошибка парсинга модуля "pngimage.pas"
строка 5648:2
Не найден завершающий тэг: " #13 "
---------------------------

Вот кусок файла
   {$IFDEF UseDelphi}Canvas.Handle := NewDC;{$ENDIF}
   NewBytesPerRow := (((Header.BitmapInfo.bmiHeader.biBitCount * cx) + 31)
     and not 31) div 8;

   {Copies the image data}  <<<< вот эта строка № 5648
   for Line := 0 to Min(CY - 1, Height - 1) do


oxffff   (2009-03-25 15:12:00) [29]


> Rouse_ ©   (25.03.09 15:11) [23]
>
> > как пользоваться твоей программой? :)
>
> Пользоваться можно только в случае установленного Дельфи
> 2007 и только на проектах от 2007-ой :)


Я так и знал, что я что то не так делаю. :))))))


oxffff   (2009-03-25 15:12:00) [30]


> Rouse_ ©   (25.03.09 15:10) [22]


Есть еще pax compiler, можно взять за основу его исходники.


Rouse_   (2009-03-25 15:11:00) [31]


> как пользоваться твоей программой? :)

Пользоваться можно только в случае установленного Дельфи 2007 и только на проектах от 2007-ой :)


Rouse_   (2009-03-25 15:10:00) [32]


> У тебя полноценный парсер и выдергиватель uses зависимостей?

До полноценного руки еще не дошли, пока только USES-ы, но в перспективе можно будет прикрутить парсер от JEDI, для четкого определения - за коим лешим на понадобился тот или иной юнит, с показом процедур и функций из-за которых используется каждый модуль в юзесах


oxffff   (2009-03-25 15:10:00) [33]

Rouse, как пользоваться твоей программой? :)
Выдает List index out of bounds(-1).


oxffff   (2009-03-25 15:07:00) [34]


>  и выдергиватель uses зависимостей?


или выдергиватель uses зависимостей?
То есть в ... грамматику, ищем только uses в файликах.


oxffff   (2009-03-25 15:04:00) [35]


> Rouse_ ©   (25.03.09 14:32) [16]


У тебя полноценный парсер и выдергиватель uses зависимостей?


Rouse_   (2009-03-25 14:59:00) [36]

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

Поэтому все дельфевые юниты я не показываю.

Работает след образом. открываем проект, ждем пока распарсится. в леаой колонке выделяем имя юнита и смотрим на экране все модуля и ссылки между ними по которым может подтянуться этот юнит в проект. Если в этот момент щелкнуть на каком либо модуле в левой колонке постоится информация, кто на него ссылатся и на кого он. А так-же подсветяться красным ссылки на те юниты на которые ссылается выбранный модуль и синим те кто ссылается на него.


Игорь Шевченко   (2009-03-25 14:44:00) [37]


> Экзешник:
> http://rouse.drkb.ru/other/unitweb.zip


А че он у тебя половину uses-ов не показывает ? :) Ограничение демо-версии ?


Rouse_   (2009-03-25 14:32:00) [38]

Да в принципе можно...
Парсит только проекты от 2007-ой при установленной 2007-ой, остальное не кушает и выдает ошибку при получении переменных окружения. (собственно с этим Рипли чейчас и возится).

Картинка:
http://rouse.drkb.ru/other/uw.gif
Экзешник:
http://rouse.drkb.ru/other/unitweb.zip
Исходники щас пилит Рипли. у меня последней версии нет, та которая есть могу дать мылом, бо там пару модулей не совсем для паблика, нет времени отвязать...


Игорь Шевченко   (2009-03-25 13:59:00) [39]

Rouse_ ©   (25.03.09 13:31) [14]


> Мне пришлось писать свой, который делает это достаточно
> нормально.


Можно ознакомиться ?


Rouse_   (2009-03-25 13:31:00) [40]


> Это о чем говорит ?

О том что продукт несовершенен.
Мне пришлось писать свой, который делает это достаточно нормально.


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

Наверх

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