Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Соглашения о вызовах DLL

Delphi , Файловая система , 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-конвенции вызова, вы получите ошибку, потому что конвенции вызова не совпадают.

Чтобы решить эту проблему, у вас есть два варианта:

  1. Используйте ключевое слово Pascal: Добавьте ключевое слово Pascal перед каждым объявлением экспортируемой функции в вашем коде Delphi, чтобы заставить его использовать конвенцию вызова Pascal.
  2. Используйте ключевое слово stdcall: Альтернативно, вы можете использовать ключевое слово stdcall вместо Pascal. Это сделает ваш DLL использовать STDCALL-конвенцию вызова, которая совместима с VB.

Помните, что если вы используете 32-разрядный Delphi, вам нужно будет использовать stdcall явно, потому что дефолтная конвенция вызова для 32-разрядного Delphi - FASTCALL.

Применив один из этих решений, вы должны сможете успешно загрузить и вызвать ваш DLL из VB.

Данная статья описывает причины некорректной работы перекомпилированных DLL-ки в Delphi и предлагает решение проблемы, связанную с соглашениями о вызовах, используемыми в 16- и 32-битных версиях программы.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: DLL и PlugIns ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100

Время компиляции файла: 2024-05-19 17:53:24
2024-05-19 21:11:37/0.0067670345306396/2