Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Адрес функции, Just look 
:(
    Опции темы
decoder
  Дата 3.9.2004, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 18.5.2004
Где: Харьков(хохол, к сожалению)

Репутация: нет
Всего: -1



Тип, который должен содержать указатель на функцию с одним параметром. Попробовал сделать так:
Код

...
type
 PFunct1 = ^TFunct1;
 TFunct1 = function(p1: Real): Real; stdcall;

 TFunction = record
   ...
   Funct: PFunct1;
   ...
 end;
...
procedure ргос;
var
 f: TFunction;
begin
 ...
 {1}f.Funct := @Cos; // требует аргументы к косинусу
 {2}ShowMessage(FloatToStr(f.Funct^(90.0))); { когда ставлю вместо кос собственную функцию на строчке 1 возникает ЭксесВиолэйшэн }
 ...
end;
...

Может здесь, хоть 10% правильны?
ПАМАГИТЕ, ЛЮДИ ДОБРЫЕ!

Это сообщение отредактировал(а) decoder - 3.9.2004, 16:13
--------------------
Молчать, я вас спрашиваю!
PM MAIL   Вверх
Illusion Dolphin
Дата 3.9.2004, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Цитата
f.Funct := @Cos;

А разве Cos работает с целыми числами? Мне казалось, что с extended или real...


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
decoder
Дата 3.9.2004, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 18.5.2004
Где: Харьков(хохол, к сожалению)

Репутация: нет
Всего: -1



Ща попробую...
Добавлено @ 15:35
функция перевода Рил в Стринг?
Добавлено @ 15:41
Всё равно требует аргументы...
--------------------
Молчать, я вас спрашиваю!
PM MAIL   Вверх
Illusion Dolphin
Дата 3.9.2004, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Код

type
Tf = function(x : real):real of object;

Код

function a(a : real):real;
begin
result:=cos(a);
end;

procedure ргос;
var f: Tf;
begin
@f:=@a;
showmessage(FloatToStr(f(2)));
end;

Так работает... напрямую адрес косинуса брать отказывается. видимо это встроенная функция (у неё нет описания, есть какой-то абстрактный _COS ), и, может, у неё нет адреса.

Это сообщение отредактировал(а) Illusion Dolphin - 3.9.2004, 15:57


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
decoder
Дата 3.9.2004, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 18.5.2004
Где: Харьков(хохол, к сожалению)

Репутация: нет
Всего: -1



не, не пойдёт...
Должно быть поле в структуре. Кроме того, нужна произвольная функция.
Так что смотри первую строчку читаемого сообщения smile.gif
--------------------
Молчать, я вас спрашиваю!
PM MAIL   Вверх
Illusion Dolphin
Дата 3.9.2004, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Цитата
Кроме того, нужна произвольная функция

Что имеется в виду? ты же всё равно будешь там писать или cos или sin, а не вводить с клавы в рунтайм...
В моём коде функция а имеет такие же параметры, как и cos, дублирует её. Если брать @a, то всё в норме, если @cos, то проблема... Я имею в виду, что, вероятно, адрес у этих функций вообще отсутствует (это встроенные в компилятор функции, если удерживать ctrl и кликнуть по тому же cos, то листинга не получишь 8( )
Цитата
Должно быть поле в структуре

f.Funct := @Cos;
замени на
f.Funct := @a;
где а - функция как у меня в коде...


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
decoder
Дата 3.9.2004, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 18.5.2004
Где: Харьков(хохол, к сожалению)

Репутация: нет
Всего: -1



Это не обязательно Sin || Cos - это любая функция, хоть встроенная, хоть нет, а то, что ты написал... Хочешь сказать, что надо переписать все функции как функция "a"(
FUNCTION nSin(p1: Real): Real;
begin
Result := Sin(p1);
end;
FUNCTION nCos(p1: Real): Real;
begin
Result := Cos(p1);
end;
...
FUNCTION nSomeFunction(p1: Real): Real;
begin
Result := SomeFunction(p1);
end;
). По-моему это глупо... Но если нет другого способа, то... 2Олл плиз найдите другой способ!

ЗЫ
Цитата(Illusion @ 3.9.2004, 16:23)
это встроенные в компилятор функции, если удерживать ctrl и кликнуть по тому же cos, то листинга не получишь
Знаю - не тупой mad.gif

Добавлено @ 16:49
Оффтоп
А чё у меня ошибки на странице вылазят? Можт сообщить кому надо?
--------------------
Молчать, я вас спрашиваю!
PM MAIL   Вверх
decoder
Дата 3.9.2004, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 18.5.2004
Где: Харьков(хохол, к сожалению)

Репутация: нет
Всего: -1



Попробовал сделать, как ты, Illusion Dolphin, посоветовал:
(см. комментарии)
Код

...
type
TFunct1 = function(p1: Real): Real of Object; stdcall;

TFunction = record
  ...
  Funct: TFunct1;
  ...
end;
...
function nCos(p1: Real): Real;
begin
 Result := Cos(p1);
end;
procedure ргос;
var
f: TFunction;
begin
...
{1}@f.Funct := @a; // проходит нормально
{2}ShowMessage(FloatToStr(f.Funct(90.0))); { матерится ExternalException'ами }
...
end;
...


Это сообщение отредактировал(а) decoder - 3.9.2004, 17:48
--------------------
Молчать, я вас спрашиваю!
PM MAIL   Вверх
Illusion Dolphin
Дата 3.9.2004, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Цитата
{1}@f.Funct := @a; // проходит нормально
{2}ShowMessage(FloatToStr(f.Funct(90.0))); { матерится ExternalException'ами }

А у тебя f.Funct это уже указатель, надо
Код

f.Funct := @a;



--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
decoder
Дата 3.9.2004, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 18.5.2004
Где: Харьков(хохол, к сожалению)

Репутация: нет
Всего: -1



Заработало! (с)Матроскин smile.gif
Эх, семь сообщений... wink.gif
--------------------
Молчать, я вас спрашиваю!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0593 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.