Текущее время: Пт, мар 29 2024, 11:33

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Почему компилятор не проверяет соответствие типов при вызове ФМ?
СообщениеДобавлено: Ср, ноя 18 2020, 17:38 
Начинающий
Начинающий

Зарегистрирован:
Вт, июн 18 2019, 14:54
Сообщения: 7
Собственно, вопрос в заголовке. В методах классов при активации ругается, а в ФМ о неправильном параметре ты узнаешь только в момент дампа. Если можно, подробное объяснение сути, зачем так сделано. Я знаю, что это из-за чего-то связанного с RFC, но не более. Заранее спасибо)


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Почему компилятор не проверяет соответствие типов при вызове ФМ?
СообщениеДобавлено: Ср, ноя 18 2020, 18:10 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
Полагаю, правильный ответ "так исторически сложилось".
Изначально строгой проверки типов при вызове ФМ нет, и если её сейчас сделать, то куча стандартного кода просто перестанет компилироваться.

Например, см ФМ UNIT_CONVERSION_SIMPLE. В нем входной параметр INPUT вообще БЕЗ без объявленного типа и поиск where used дает больше 1000 мест использования.

_________________
Удача - результат нашего желания (© А. Нортон)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Почему компилятор не проверяет соответствие типов при вызове ФМ?  Тема решена
СообщениеДобавлено: Чт, ноя 19 2020, 07:36 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Пт, сен 07 2007, 07:53
Сообщения: 1392
Вызов ФМ - это всегда динамическая линковка. Обращали внимание на то, что при вызове ФМ указывается литерал, переменная или константа? То есть, в общем случае компилятор ничего не знает о вызываемой ФМ, в том числе и о ее параметрах. ФМ на момент компиляции может даже не существовать. Поэтому все проверки происходят в runtime. Там ведь кроме поиска и загрузки самого ФМ и передача параметров должна происходить не обычным способом - по имени. Обычная передача через стег работать не будет.

Очень похоже на то, что происходит при работе с OLE (OLE Automation). Там работает интерфейс IDispatch, который организует вызов процедур и передачу параметров по имени. И ошибки вызыва будут только в runtime.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Почему компилятор не проверяет соответствие типов при вызове ФМ?
СообщениеДобавлено: Чт, ноя 19 2020, 14:27 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, мар 29 2007, 11:51
Сообщения: 330
Откуда: Yugorsk.RU
Пол: Мужской
Расширенная проверка - выполняет. Просто абаперы иногда ленятся её запускать, она ж медленная. В итоге дампы в продуктиве обычно.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Почему компилятор не проверяет соответствие типов при вызове ФМ?
СообщениеДобавлено: Чт, ноя 19 2020, 14:44 
Начинающий
Начинающий

Зарегистрирован:
Вт, июн 18 2019, 14:54
Сообщения: 7
RoustR написал(а):
Вызов ФМ - это всегда динамическая линковка. Обращали внимание на то, что при вызове ФМ указывается литерал, переменная или константа? То есть, в общем случае компилятор ничего не знает о вызываемой ФМ, в том числе и о ее параметрах. ФМ на момент компиляции может даже не существовать. Поэтому все проверки происходят в runtime. Там ведь кроме поиска и загрузки самого ФМ и передача параметров должна происходить не обычным способом - по имени. Обычная передача через стег работать не будет.

Очень похоже на то, что происходит при работе с OLE (OLE Automation). Там работает интерфейс IDispatch, который организует вызов процедур и передачу параметров по имени. И ошибки вызыва будут только в runtime.

Спасибо за подробный ответ!))


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB