Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];

Вниз

Callback-функции   Найти похожие ветки 

 
TUser ©   (2006-04-25 12:35) [0]

Можно ли использовать локальную процедуру (функцию) в качестве call-back. Например, можно использовать такой код

type
TAAA = function (...): ...;

function AAA (...): ...; // функция типа TAAA
begin
end;

procedure BBB (Func: TAAA);
begin
 Func (...)  
end;

procedure CCC;
begin
 BBB (AAA);
end;

Хотелось бы передавать функции BBB локально объявленную процедуру (функцию). Т.е. что такое

type
TAAA = function (...): ...;

procedure BBB (Func: TAAA);
begin
 Func (...)  
end;

procedure CCC;

function AAA (...): ...; // функция почти типа TAAA
begin
end;

begin
 BBB (AAA);
end;

К сожалению, Паскаль так не умеет. Не компилирует, ибо запрещено правилами языка (incomparable types). Можно ли как-нибудь обмануть компилятор?

Компилятор - Delphi 7.


 
Сергей М. ©   (2006-04-25 12:43) [1]


> почти типа


Что значит "почти типа" ?

Паскаль таких "вольностей" не допускает ..


 
begin...end ©   (2006-04-25 12:46) [2]

> TUser ©   (25.04.06 12:35)

> BBB (AAA);

BBB (TAAA(@AAA));


 
Гаврила ©   (2006-04-25 12:52) [3]

Нельзя.


 
TUser ©   (2006-04-25 12:56) [4]

begin...end ©   (25.04.06 12:46) [2]
Точно. Спасибо.


 
evvcom ©   (2006-04-25 14:05) [5]

Через указатели и приведение типов можно обманывать компилятор, как вздумается (я уж не говорю про ассемблер). Главное - понимать, что делаешь, иначе скорее всего словишь AV.


 
jack128 ©   (2006-04-25 14:52) [6]

evvcom ©   (25.04.06 14:05) [5]
Главное - понимать, что делаешь, иначе скорее всего словишь AV.

в данном случае в 99% словишь AV.


 
jack128 ©   (2006-04-25 14:55) [7]

jack128 ©   (25.04.06 14:52) [6]
точнее так: если AAA использует локальные переменные, объявленные в ССС - то AV гарантирован..


 
evvcom ©   (2006-04-25 15:08) [8]

Ну про количество процентов (99% или 99,99% :) ) спорить не буду, т.к. вычислить его практически невозможно. А вот то, что AAA локальная функция в ССС только сейчас обратил внимание. Ну а смысла ее делать локальной без использования лок.переменных CCC тоже не вижу. Посему способ явно не гуд.


 
TUser ©   (2006-04-25 15:20) [9]

Уже наступил на эти грабли. ААА теперь глобальная, аминь.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.01 c
2-1145808019
mctarik
2006-04-23 20:00
2006.05.14
Вызов процедуры в MessageBox


2-1146147261
Kolyan()
2006-04-27 18:14
2006.05.14
Поддержка синтаксиса в приложении


15-1145504038
antonn
2006-04-20 07:33
2006.05.14
про копирайты


15-1145250364
Ega23
2006-04-17 09:06
2006.05.14
С Днём рождения! 15 апреля


1-1144150939
VIB1
2006-04-04 15:42
2006.05.14
MS SQL 2005 QuickReport





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский