Текущее время: Вс, апр 28 2024, 20:18

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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