Вопрос № 82506: Здравствуйте, уважаемые эксперты!
Изложу суть дела:
написал приложение на Delphi6, использующее API функции, которые помещены в одну общую функцию, находящуюся в dll библиотеке, написанной в C++Builder.
Проблема в следующем:
При стати...
Вопрос № 82.506
Здравствуйте, уважаемые эксперты!
Изложу суть дела:
написал приложение на Delphi6, использующее API функции, которые помещены в одну общую функцию, находящуюся в dll библиотеке, написанной в C++Builder.
Проблема в следующем:
При статической загрузке библиотеки (в начале pas файла происходит external вызов функции из библиотеки) все работает хорошо.
В качестве параметра общей функции передается число, и в зависимости от его значения (например, 1.2 и т.п.) происходят определенные операции (в частности, перезагрузка, выключение компьютера и др.).
Но мне нужно загружать библиотеку динамически. В этом случае то число, что я помещаю в функцию при вызове в приложении после загрузки библиотеки и получения адреса процедуры(getProcAddress), не используется в ней (функции), и в итоге не происходит выбора нужной операции в функции в библиотеке. По-моему, проблема именнно в этом, но я не знаю, как передать значение, а если оно передается (хотя сам проверял по возвращаемому значению функции), то прошу объяснить, что не так.
Я пытался разобрать более простой пример, но и здесь та же ситуация.
Если возможно, объясните на нем.
Функция number возвращает в этом случае 144080.
Эта и моя функции ничем не отличаются, только содержанием, но также есть выбор if,и он не выполняется (только в случае динамической загрузки).
Представлены фрагмент вызова функции по нажатии на кнопку и содержание библиотеки.
Спасибо!
1. В описании типа TNumber стоит добавить stdcall.
2. Слегка странно выглядит код динамической линковки - может так тоже должен работать, но я обычно использую присваивание без знака @, т.е. number := GetProcAddress(h, 'number'); и все прекрасно работает. Может здесь проблема?
Ответ отправил: PGM (статус: 4-ый класс)
Ответ отправлен: 14.04.2007, 11:54 Оценка за ответ: 5 Комментарий оценки: Большое спасибо!Теперь работает (сам не обратил внимание, что при стат. вызове пишется stdcall)