Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Через 3 дня :

День победы русской эскадры под командованием П.С. Нахимова над турецкой эскадрой у мыса Синоп (1853)


директивы Delphi и назначения


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
CyberMerlin
Гость







СообщениеПн, 18-Июн-2007 22:30    Заголовок сообщения: директивы Delphi и назначения
Цитата

register
pascal
cdecl
stdcall
safecall

override - используется если мы переназначаем процедуру
virtual
dynamic

platform - указывает на использование только в создаваемой платформе
deprecated
library

of object

все это используется в описательной части процедур и функций
ПОЯСНИТЕ КТО-Н ПЛИЗ ТОЛКОВО НА РУССКОМ ЯЗЫКЕ ЧТО ЗА ПОЕ..РУНДЕНЬ
в каких случаях выгодно их использовать,
и где их лучше не применять.

PS по возможности без простраций вроде - "используй там где это нужно", без того моск вскипел в потугах понять ангельский язык
В начало
Пол:Муж NikotiN
Розовый мамонт


Возраст: 32
Знак зодиака: Овен
Зарегистрирован: 18.03.2005
Сообщения: 2137

СообщениеПн, 18-Июн-2007 23:17 
Цитата

pascal, cdecl, stdcall - методы передачи аргументов функции при её вызове. актуально если функции dll/exe из одного языка используется в других проектах других языков. т.е. у всех по разному параметры передаюстся. у кого-то по порядку, а у кого-то через одно место.

virtual - для процедуры которая потом будет override
dynamic - тоже самое. но меньше код. у прошлой больше скорость. мною разницы замечено небыло, хотя занимался 3д программированием....

deprecated - точно не скажу, но по идее данная функция будет использоваться с сообщением (warning) об её устаревании
library - ну есть программа (exe файл, programm), а есть библиотека (dll файл, library)

of object - класс, который не нужно создавать, т.е. типа record, но все фичи класса (функции и т.п.)

ЗЫ: там ещё много всяких приблуд есть)

_________________
Сила дурака в том, что умный перед ним бессилен.
В начало
Посмотреть профиль Отправить личное сообщение
CyberMerlin
Гость







СообщениеВт, 19-Июн-2007 9:07 
Цитата

to NikotiN
агу Thank you!
Цитата:
ЗЫ: там ещё много всяких приблуд есть)

с другими пока еще не встречался

Цитата:
pascal, cdecl, stdcall

соответственно для
pascal C API процедур?

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

Добавлено спустя 12 минут 30 секунд:

of object
не пойму, что мы тогда выигрываем превращая процедуру или функцию в класс?

procedure Zimbabve_mistery(ker: variant) of odject;
В начало
Alekc
Частый гость




Зарегистрирован: 01.04.2007
Сообщения: 28

СообщениеВт, 19-Июн-2007 10:38 
Цитата

Блин, вы даёте...
of object означает что эта процедура должна быть методом класса. Используется в описании типов событий классов.
В начало
Посмотреть профиль Отправить личное сообщение
CyberMerlin
Гость







СообщениеВт, 19-Июн-2007 11:28 
Цитата

т.е. если забыл ее вписать при описании какого-н класса?
В начало
Alekc
Частый гость




Зарегистрирован: 01.04.2007
Сообщения: 28

СообщениеВт, 19-Июн-2007 13:36 
Цитата

Нет.
Посмотри объявление какого-нить контрола, типа TCustomButton и потом на описание, например, TNotifyEvent и все поймешь.

type
TNotyfyEvent = procedure (Sender: TObject) of Object;

property OnClick: TNotyfyEvent read .... write .... ;
В начало
Посмотреть профиль Отправить личное сообщение
CyberMerlin
Гость







СообщениеВт, 19-Июн-2007 13:54 
Цитата

вроде понял
посмотрим как на практике это у меня получится реализовать

много всем спасибков
В начало
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 38
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5708
Откуда: Донецк
СообщениеВт, 19-Июн-2007 18:12 
Цитата

register - передача первых трех параметров в подпрограммы через регистры, остальные - через стек. Самый быстрый способ, используется по умолчанию, поэтому это слово можно и не писать
pascal - похоже на register, но все параметры передаются через стек. Надо использовать, когда работаешь с какой-то чужой DLL, афтар которой заюзал именно этот формат вызова. В остальных случаях не надо.
stdcall - похоже на pascal, но параметры передаются в обратном порядке. Этот метод юзается в ВинАПИ, поэтому если хочешь импортировать апишную функцию, он тебе пригодится
cdecl - похоже на stdcall, но стек очищается не в самой функции, а в вызывающем ее коде. По умолчанию юзается некоторыми синшными компиляторами, так что если работаешь с сишной DLL, то возможно пригодится именно этот метод.
safecall - тоже похоже на stdcall, но неявно генерирует try..except-оболочку вокруг функции. Юзается для СОМ-приложений.


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

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
CyberMerlin
Гость







СообщениеВт, 19-Июн-2007 22:03 
Цитата

to DrPass
низкий поклон
чуть не начал городить огороды в коде

вот вопрос у меня
procedure WndProc(var mesag:TMessage); override;

так описываю процедуру в которой обрабатываю некоторые сообщения
в конце я пишу
inherited;
ЛИБО
Result := DefWindowProc(form1.handle, Msg, wParam, lParam);

это кажется все правильно, но OVERRIDE меня смущает, его надо писать?
если да то наверное потому что WndProc уже используется и именно для таких целей, т.е. я своего рода перекрытие сделал так?
а если я назову процедуру по другому, тогда мне нужно будет использовать эту директиву?
или по другому назвать процедуру нельзя - по причине неграмотности ??
В начало
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 38
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5708
Откуда: Донецк
СообщениеВт, 19-Июн-2007 23:45 
Цитата

Неа, override позволяет тебе перекрыть виртуальный или динамический метод. Т.е. так:
delphi:
  1. Tparent=class
  2.   procedure proc1; virtual;
  3. end;
  4.  
  5. Tchild = class(Tparent)
  6.   procedure proc1; override;
  7. end;

В этом случае при создании экземпляра Tchild2 его proc1 заменит собой proc1 родительского класса, если она где-то вызывается. В каких-либо других случаях волшебное слово override не используется

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
CyberMerlin
Гость







СообщениеСр, 20-Июн-2007 0:07 
Цитата

т.е. с WndProc - как раз мой клинический случай? Улыбка
В начало
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 38
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5708
Откуда: Донецк
СообщениеСр, 20-Июн-2007 0:37 
Цитата

Цитата:
т.е. с WndProc - как раз мой клинический случай?

Если там в родительском классе оно идет со словом virtual или dynamic, то таки да. Если нет, то тогда это ты так, просто процедурку написал. Безвредную, но и бесполезную :)

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100