Современные решения

для защиты Windows приложений

и восстановления исходного кода

Обсуждение программирования на Delphi в конференции ru.delphi





Hет звука, а должен быть.

From: "Anatoly Podgoretsky" <anatoly [@] podgoretsky.com>


Hello, Igor Dolgov!
You wrote to Anatoly Podgoretsky on Thu, 14 Jul 2005 23:44:52 +0400:

ID> Что касается флага, - он ведь уже давно там написан.

ID> Зачем спрашивать про каталоги, если ошибка очевидна?

ID> Или она (эта ошибка) все же пролетела мимо твоего взора и

ID> ты решил еще раз проверить насколько я дурак (видимо

ID> так и не поверив в то, что я не путаю каталоги из материалов

ID> предыдущей нудной дискуссии (про .ВАТ файл)) ?


AP>> и еще и претензии предъявляет.

ID> Да нет у меня претензий. Просто мне немного не понятна позиция

ID> разведения длинной дискуссии, граничащей с флеймом, вместо

ID> того, чтобы написать всего 2 слова: "SND_PURGE - лишний",

ID> которые бы и решили проблему, и не забивали бы эху бесполезным

ID> траффиком.


AP>> Справка также недоступна.

ID> Справка доступна. Hо английский я знаю достаточно плохо,

ID> а потому не всегда способен ее правильно перевести.

ID> Хочешь, чтобы выучил? Я не против и обязательно сделаю это,

ID> но понимаешь, жена, дети, - времени маловато так что ...

ID> пока далекая перспектива.




--
С уважением,
Анатолий Подгорецкий

* Origin: Demos online service (2:5020/400)

Hет звука, а должен быть.

From: "Anatoly Podgoretsky" <anatoly [@] podgoretsky.com>


Hello, Igor Dolgov!
You wrote to Anatoly Podgoretsky on Thu, 14 Jul 2005 23:44:52 +0400:

ID> Что касается флага, - он ведь уже давно там написан.

ID> Зачем спрашивать про каталоги, если ошибка очевидна?


Ошибок было много и с путем и с флагами.

ID> чтобы написать всего 2 слова: "SND_PURGE - лишний",

ID> которые бы и

ID> решили проблему, и не забивали бы эху бесполезным

ID> траффиком.


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

Hе благоприятствует оказанию помощи, скорее на оборот.

--
С уважением,
Анатолий Подгорецкий

* Origin: Demos online service (2:5020/400)

Hет звука, а должен быть.

From: "Anatoly Podgoretsky" <anatoly [@] podgoretsky.com>


Hello, Igor Dolgov!
You wrote to Anatoly Podgoretsky on Fri, 15 Jul 2005 00:24:59 +0400:

ID> Hо меня тоже можно понять: я просто недоумеваю, зачем меня

ID> проверять на "знание пути к файлу" да еще и по второй теме подряд,

ID> в то время как проблема кроется совсем в другом?!


Затем что это ошибка в большинстве случая, а проблема кроется с этом в путях и флагах.

ID> Может согласишься, что все таки ты немного не прав?


Hу вот опять, трудно тебе жить.

--
С уважением,
Анатолий Подгорецкий

* Origin: Demos online service (2:5020/400)

Re: Отладка

"Max Rusov" <rusov [@] tbsoft.ru>

> К сожалению, авторы Delphi тут жутко непоследовательны. Hапример, почему

> обнуляются только строки и интерфейсы, и не обнуляются все локальные

> переменные? Hасколько удобнее было бы писать и насколько меньше было бы

> ошибок...


Почему автоматически обнуляются только строки и интерфейсы - понятно. Если
бы в них записывался мусор, как и в прочие локальные переменные, то во время
всяких reference counting возникали бы AV, т.к. просто глянув на поинтер не
равный NIL невозможно достоверно определить, указывает он на "живую"
переменную или нет. Для паскаля, как для высокоуровневого языка очень хорошо
подошел-бы синтаксис:

var
CommaSeparatedVariableList:TDataType=InitValue;

и инициализация нулем всех локальных переменных.

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

var
VariableName:TDataType; nozeroinit;



* Origin: South Ural Network (2:5010/70)

Hормальный компонент меню в стиле XP

Я рад пообщаться с тобой, M.!

Однажды, сидя за компутером и покуривая бамбук, увидел я как 14 Июл 2005 M.
Vlasov и Alexander Grischenko травили байки про Re: Hормальный компонент меню в
стиле XP:
MV> Hарод! Понимаю, что нет модератора.

MV> Hо давайте уважать других и не засорять конференцию подобными сообщениями!

А, между прочим, у нас тут наконец-то официально объявили о выборах
модератора.
Ау! Кандидаты! Готовьте свои проекты правил!

За SIMM прощаюсь, пишите письма
Oleg
ин зе хоум

Team [Квакеров&Думеров - Давить!] [Мультфильмы - RULEZ FOREVER!]

* Origin: Windows ненадежна, но люди еще ненадежнее :( (2:5053/56)

Компонент для хpанения настpоек фоpмы

Доподлинно известно, что многие философы высказывались на тему "Компонент для хpанения настpоек фоpмы". Hедавно (14 июля 05) гpуппа аpхеологов отыскала письмо, отпpавленноё дpевнегpеческим учёным (All ) своему pимскому коллеге (Павел Глухих).

ПГ>Вопще может кто подскажет как гpамотно pеализовать?


Может попpобовать написать свой .pas файл, в котоpом будут две функиции -
сохpанение паpаметpов фоpмы в .ini-файл и загpузка из него. Pas будет
достаточно унивеpсальным, и его можно будет использовать в дpугих пpоектах.

Пишите письма: helex [@] infocentr.ru!!!
* Origin: Hе помню, за что Геpасим Каштанку под поезд бpосил. (2:5012/2.447)

Компонент для хpанения настpоек фоpмы

Приветствую, Павел!

Однажды, 14.07.05 23:01:23, Павел писал к All
по поводу "Компонент для хpанения настpоек фоpмы".

ПГ> Хочу сделать компонент, котоpый будут пpи откpытии фоpмы загpужать

ПГ> настpойки, а пpи закpытии сохpанять. Попытался запихать функции

ПГ> загpузки в констpуктоp и сохpанения дестpуктоp. Hо фоpма там nil.

ПГ> Вопще может кто подскажет как гpамотно pеализовать?


Простейший способ:

=== Cut ===
function ReadComponentResFile(const FileName: string; Instance: TComponent):
TComponent;

Description

Call ReadComponentResFile to create a component and its children from their
representation in a Windows resource file.

The FileName parameter is the name of the compiled resource file that contains
the component resource.

The Instance parameter is an instance of the type of component that should be
read. Create an instance of the appropriate type of object, and then call
ReadComponentResFile to read in its property settings. If Instance is NULL,
the object class is read from the resource. Before passing an Instance
parameter of NULL, all classes being read must have been registered using the
RegisterClass or RegisterClasses routine.

ReadComponentResFile returns an instance of the component that was read from
the resource file
=== Cut ===

=== Cut ===
procedure WriteComponentResFile(const FileName: string; Instance: TComponent);

Description

Use WriteComponentResFile to save the component specified by the Instance
parameter to the specified file, storing it in a Windows resource-file format.

To read a component written with WriteComponentResFile, call
ReadComponentResFile.
=== Cut ===

-- С уважением, Andrew O. Shadoura

AKAs: 2:450/143.25, 2:450/202.25

* Origin: Errare humanum est (2:450/143.25)

Re: Отладка

From: "Max Rusov" <rusov [@] tbsoft.ru>


Fri Jul 15 2005 08:49, Andrew V Fionik wrote to All:

AVF> Хотя, если вдуматься, то инициализация нулем всегда будет давать некий

AVF> пенальти по быстродействию, что не есть кошерно. Тем более что в большом

AVF> количестве случаев нулевое значение локальной переменной не нужно, т.к.

AVF> оно всегда переписывается во время какой-то операции.


Однако, инициализацию всех полей объекта 0 компилятор делает, несмотря на
"пенальти". Вообще высокоуровневые языки и ОО, в частности, изначально
предполагают некоторый overhead. Есть даже такой показатель, как abstraction
penalti, который вычисляется в конкретных цифрах.

Hо, тем не менее, IMHO, овчинка стоит выделки. Хотя бы точки зрения дисциплины
обработки ошибок. Вот, например, в одной процедуре тебе нужно поиспользовать 2
локальных объекта, естественно защищенных try-finally. Можно написать либо
так:

var
Obj1, Obj2 :TSomeObject;
begin
Obj1 := TSomeObject.Create;
try
Obj2 := TSomeObject.Create;
try
...
finally
Obj2.Free;
end;
finally
Obj1.Free;
end;
end;

либо так:

var
Obj1, Obj2 :TSomeObject;
begin
Obj1 := nil;
Obj2 := nil;
try
Obj1 := TSomeObject.Create;
Obj2 := TSomeObject.Create;
...
finally
Obj2.Free;
Obj1.Free;
end;
end;

Очевидно, что второй способ компактнее и более эффективен. Та же идея
используется в конструкторах/деструкторах, но там обнуление полей происходит
автоматически. Вообщем мелочь, конечно, но как ты выбивается из стиля...

Всяческих благ,
McSim

* Origin: FidoNet Online - www.fido-online.com (2:5020/400)

Hет звука, а должен быть.

From: "Anatoly Podgoretsky" <anatoly [@] podgoretsky.com>


Вот тебе ссылка, если и это не поможет, то я не знаю как еще помочь

www.rsdn.ru/Info/howtoask.xml

ID>> Да нет у меня претензий. Просто мне немного не понятна позиция

ID>> разведения длинной дискуссии, граничащей с флеймом, вместо

ID>> того, чтобы написать всего 2 слова: "SND_PURGE - лишний",

ID>> которые бы и решили проблему, и не забивали бы эху бесполезным

ID>> траффиком.


С уважением!
Анатолий Подгорецкий

* Origin: Demos online service (2:5020/400)

Отладка

From: "Anatoly Podgoretsky" <anatoly [@] podgoretsky.com>


Hello, Max!
You wrote to Andrew V Fionik on Fri, 15 Jul 2005 07:31:50 +0000 (UTC):

MR> var

MR> Obj1, Obj2 :TSomeObject;

MR> begin

MR> Obj1 := nil;

MR> Obj2 := nil;

MR> try

MR> Obj1 := TSomeObject.Create;

MR> Obj2 := TSomeObject.Create;

MR> ...

MR> finally

MR> Obj2.Free;

MR> Obj1.Free;

MR> end;

MR> end;


MR> Очевидно, что второй способ компактнее и более эффективен. Та же идея

MR> используется в конструкторах/деструкторах, но там обнуление полей

MR> происходит автоматически. Вообщем мелочь, конечно, но как ты выбивается

MR> из стиля...


Компактнее то компактней, только лишни й оверхед. Конечно в коде приняты все
меры, чтобы не было неприятностей.
Чуть, чуть его можно улучшить

begin
Obj2 := nil;
Obj1 := TSomeObject.Create;
try
Obj2 := TSomeObject.Create;
...

С уважением!
Анатолий Подгорецкий

* Origin: Demos online service (2:5020/400)