![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Ошибка ESP в Visual C++ при вызове функции из DLL на Delphi 7: Поиск и исправление несоответствия соглашений о вызовахDelphi , Файловая система , DLL и PlugInsПри работе с внешними библиотеками, написанными на различных языках программирования, одной из частых проблем является несоответствие соглашений о вызовах (calling conventions). В данном случае, рассмотрим проблему, с которой столкнулся разработчик, использующий DLL, созданную в Delphi 7, в проекте на Visual C++ 2008. ПроблемаРазработчик столкнулся с ошибкой "The value of ESP was not properly saved across a function call" при вызове функции
где Анализ проблемыОсновная проблема заключается в несоответствии соглашений о вызовах между C++ приложением и DLL на Delphi. По умолчанию, Delphi использует соглашение о вызовах РешениеДля решения проблемы необходимо изменить определение указателя на функцию в коде на C++:
Это предполагает, что функция в Delphi действительно использует соглашение Пример кодаВот пример кода на C++, который использует измененное определение указателя на функцию:
ЗаключениеПри работе с внешними библиотеками важно учитывать соглашения о вызовах. В данном случае, изменение определения указателя на функцию на Разработчик сталкивается с ошибкой ESP при вызове функции из DLL, созданной в Delphi 7, в приложении на Visual C++, из-за несоответствия соглашений о вызовах функций между языками программирования. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: DLL и PlugIns ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |