Форум: "Начинающим";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];
ВнизКак в runtime показать время компиляции программы? Найти похожие ветки
← →
novill © (2006-08-15 22:53) [0]сабж
← →
Virgo_Style © (2006-08-15 22:55) [1]и главное, зачем?
← →
Германн © (2006-08-16 00:41) [2]Не. Ещё главнее - что есть "время компилляции"? Дата/время или длительность? :-)
← →
Джо © (2006-08-16 02:58) [3]У меня в ряде старых проектов нужно было вместо номера версии (а она, в силу некоторых причин, обновлялась очень часто) выводить дату и время компиляции проекта.
Проблему решил написанием нехитрого AddIn"а , подключаемого к IDE.
Вот текст модуля CompileTimeExpert.pas.
{
AddInNotifier, срабатывающий при компиляции проекта.
Помещает в каталог с главным файлом проекта файл CompileDateTime.inc
с объявлением констант, содержащих актуальную дату и время компиляции проекта.
Автор: Каминский С.А.
}
unit CompileTimeExpert;
interface
uses Windows, ExptIntf, ToolIntf;
type
TCompileTimeNotifier = class(TIAddInNotifier)
public
procedure FileNotification(NotifyCode: TFileNotification;
const FileName: string; var Cancel: Boolean); override;
procedure EventNotification(NotifyCode: TEventNotification;
var Cancel: Boolean); override;
end;
procedure Register;
implementation
uses SysUtils;
var
Notifier: TCompileTimeNotifier;
procedure Register;
begin
//
end;
procedure TCompileTimeNotifier.EventNotification(
NotifyCode: TEventNotification; var Cancel: Boolean);
var
Fv: TextFile;
Fn: string;
begin
if (NotifyCode = enBeforeCompile) and (ToolServices.GetProjectName <> "") then
begin
Fn := ExtractFilePath (ToolServices.GetProjectName) +
"CompileDateTime.inc";
AssignFile (Fv,Fn);
try
Rewrite (Fv);
WriteLn (Fv, "//");
WriteLn (Fv, "// Auto-generated compile datetime file for " +
ExtractFileName (ToolServices.GetProjectName) + " project");
WriteLn (Fv, "// Include it in your project with {$include CompileDateTime.inc} directive");
WriteLn (Fv, "//");
WriteLn (Fv, "const");
WriteLn (Fv, " _CompileDateTime = ", FloatToStr(Now));
WriteLn (Fv, " _CompileTimeStr = ", TimeToStr(Now));
WriteLn (Fv, " _CompileDateStr = ",DateToStr(Now));
WriteLn (Fv, " _CompileDateTimeStr = ",DateTimeToStr(Now));
finally
CloseFile (Fv);
ToolServices.ReloadFile(Fn);
end;
end;
end;
procedure TCompileTimeNotifier.FileNotification(
NotifyCode: TFileNotification; const FileName: string;
var Cancel: Boolean);
begin
end;
initialization
Notifier := TCompileTimeNotifier.Create;
ToolServices.AddNotifierEx(Notifier);
finalization
ToolServices.RemoveNotifier(Notifier);
Notifier.Free;
end.
AddIn устанавливается в среду стандартно, т.е, через меню Component/Install component...
После установки, при каждой компиляции любого проекта в каталоге с проектом будет автоматически генерироваться файл CompileDateTime.inc. В нем будут находиться следующие константы с указанием даты/времени последней компиляции проекта://
// Auto-generated compile datetime file for Project1.dpr project
// Include it in your project with {$include CompileDateTime.inc} directive
//
const
_CompileDateTime = 38945.0731506713
_CompileTimeStr = 1:45:20
_CompileDateStr = 16.08.2006
_CompileDateTimeStr = 16.08.2006 1:45:20
Для их использования достаточно включить этот файл в нужное место программы при помощи директивы компилятора {$include} и использовать эти константы по назначению.
В общем, всё просто :)
← →
Джо © (2006-08-16 03:32) [4]> [2] Германн © (16.08.06 00:41)
> Дата/время или длительность? :-)
Длительность компиляции определить тоже несложно :) Вносим следующие исправления:...
implementation
uses SysUtils, DateUtils;
var
Notifier: TCompileTimeNotifier;
LastCompileDt: TDateTime = 0;
procedure TCompileTimeNotifier.EventNotification(
NotifyCode: TEventNotification; var Cancel: Boolean);
var
Fv: TextFile;
Fn: string;
begin
if ToolServices.GetProjectName = "" then
Exit;
Fn := ExtractFilePath (ToolServices.GetProjectName) +
"CompileDateTime.inc";
try
case NotifyCode of
enBeforeCompile:
begin
AssignFile (Fv,Fn);
try
Rewrite (Fv);
LastCompileDt := Now();
WriteLn (Fv, "//");
WriteLn (Fv, "// Auto-generated compile datetime file for " +
ExtractFileName (ToolServices.GetProjectName) + " project");
WriteLn (Fv, "// Include it in your project with {$include CompileDateTime.inc} directive");
WriteLn (Fv, "//");
WriteLn (Fv, "const");
WriteLn (Fv, " _CompileDateTime = ", FloatToStr(Now));
WriteLn (Fv, " _CompileTimeStr = ", TimeToStr(Now));
WriteLn (Fv, " _CompileDateStr = ",DateToStr(Now));
WriteLn (Fv, " _CompileDateTimeStr = ",DateTimeToStr(Now));
finally
CloseFile (Fv);
end;
end;
enAfterCompile:
begin
AssignFile (Fv,Fn);
try
Append (Fv);
WriteLn (Fv, " _CompileDurationInSec = ",
FloatToStr(SecondSpan(Now(),LastCompileDt)));
finally
CloseFile (Fv);
end;
end;
end;
finally
ToolServices.ReloadFile(Fn);
end;
end;
Вуаля — имеем еще одну константу, _CompileDurationInSec. Правда, придумать этому практическое применение сложнее, чем написать этот AddIn :)
← →
evvcom © (2006-08-16 08:46) [5]А в PE заголовке есть DWORD, который используется для хранения даты и времени создания/модификации линкером. Или его дельфовый линкер не прописывает? Сам я не смотрел, что реально там находится.
← →
novill © (2006-08-16 11:33) [6]Джо, большое спасибо.
← →
Ketmar © (2006-08-16 11:37) [7]> [5] evvcom © (16.08.06 08:46)
бред всякий там.
← →
DrPass © (2006-08-16 12:19) [8]
> Вуаля — имеем еще одну константу, _CompileDurationInSec.
> Правда, придумать этому практическое применение сложнее
Легко - складывать это значение от каждой компиляции, полученную сумму в конце дня вычитать делить на 3600 и умножать на стоимость рабочего часа программиста. А результат вычитать из его зарплаты. Ведь когда программа компилируется, программист обычно нифига не делает...
← →
Джо © (2006-08-16 12:27) [9]Исходник копировал с чернового варианта, там строковые константы еще заквотить нужно.
> [8] DrPass ©
Не дай бог работодателям прочитать этот пост :)
← →
KilkennyCat © (2006-08-16 12:45) [10]> Ведь когда программа компилируется, программист обычно нифига
> не делает...
Ничего подобного. Если программист производит впечатление неработающего, это вовсе не означает, что он - не работает....
Помню, лет восемь назад, работало у меня одно чудо: даю вечером задание, к утру надо сделать. Сижу, работаю, периодически посматриваю, что делает чудо. Чудо играет.
Проходит час - чудо играет. Я не выдерживаю, спрашиваю о программе. отвечает, что помнит, к утру сделает. Проходит час. Чудо играет...
Чудо играло всю ночь.
А утром программа была готова, и близко к идеалу. Клиент был счастлив.
Когда она была сделана я так и непонял, ибо у меня ушло бы часа четыре на нее...
← →
novill © (2006-08-16 14:39) [11]> [9] Джо © (16.08.06 12:27)
> Исходник копировал с чернового варианта, там строковые константы
> еще заквотить нужно.
угу, еще и сточки с запятой поставить :)
← →
Джо © (2006-08-16 14:49) [12]> [11] novill © (16.08.06 14:39)
> угу, еще и сточки с запятой поставить :)
Истинно так :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.029 c