![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Соглашения о вызовах DLLDelphi , Файловая система , DLL и PlugInsСоглашения о вызовах DLLАвтор: David Berg Кто-нибудь может мне сказать, почему мои перекомпилированные DLL-ки не грузятся? Передаются только данные, имеющие тип pchars и integer. Одно отличие между 16- и 32-битной версией Delphi - соглашение о вызове. 16-битная версия использует по умолчанию вызов PASCAL (перекрываемый CDECL). 32-битная использует по умолчанию FASTCALL, но может перекрываться CDECL, PASCAL или STDCALL. Я не уверен в том, что сейчас использует VB (в 16-битном Windows API был Pascal, в 32-битном - STDCALL). Я добавляю ко всем экспортируемым функциям ключевое слово "PASCAL". Если это не решает проблему, попробуйте использовать "STDCALL". Проблема, которую вы сталкиваетесь, вероятно, вызвана разными конвенциями вызова, используемыми в Delphi и VB. В 16-разрядном Windows API Pascal был дефолтной конвенцией вызова, а в 32-разрядном Windows API STDCALL (также известный как stdcall) стал дефолтной. Когда вы компилируете ваш DLL с помощью Delphi, он использует по умолчанию конвенцию вызова Pascal для обеспечения совместимости с 16-разрядными системами. Однако, когда вы вызываете этот DLL из VB, которое ожидает STDCALL-конвенции вызова, вы получите ошибку, потому что конвенции вызова не совпадают. Чтобы решить эту проблему, у вас есть два варианта:
Помните, что если вы используете 32-разрядный Delphi, вам нужно будет использовать Применив один из этих решений, вы должны сможете успешно загрузить и вызвать ваш DLL из VB. Данная статья описывает причины некорректной работы перекомпилированных DLL-ки в Delphi и предлагает решение проблемы, связанную с соглашениями о вызовах, используемыми в 16- и 32-битных версиях программы. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: DLL и PlugIns ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |