![]() |
|
|
![]()
|
|
| Любаша |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
В Dll файле есть функция
float COMCOM(float re_1,float re_2,float im_1,float im_2) {float rez_re,rez_im; rez_re = re_1 - re_2; rez_im = im_1 - im_2; return rez_re,rez_im;}; Каким образом ее объявить и вызвать в программе. Я никак не могу разобраться как их объявлять, эти функции. Какой type объявлять… ничего не понимаю!!! ПОМОГИТЕ ПОЖАЛУЙСТА! |
|||
|
||||
| stmamont |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 343 Регистрация: 13.3.2004 Где: влг Репутация: 3 Всего: 3 |
файл Dll.def нужно подключить к проекту библиотеки
файл Dll.cpp - "главный" файл библиотеки
файл getfromdll.cpp - часть кода где вызывается функция из dll
так должно быть получше... |
||||||
|
|||||||
| Любаша |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
[C++ Warning] Unit1.cpp(30): W8004 'modFunc' is assigned a value that is never used
[C++ Error] Unit1.cpp(45): E2268 Call to undefined function 'modFunc' [C++ Error] Unit1.cpp(48): E2451 Undefined symbol 'Dll' почему такие гадости. если подключать Dll и функции из него при помощи одной кнопки а вызывать их при помощи другой
а если все прописать для одной кнопки то нормально |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Так неправильно:
У тебя область видимости ограничена методом кнопки! Инициализация библиотеки должна быть там, где все найденные методы и сам хандлер библиотеки видны из всех необходимых мест и живут все необходимое время. А так, получается, что после отработки вышеуказанного кода - все объявленные в стеке переменные исчезнут. |
|||
|
||||
| Любаша |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Тогда каким образом? Каждый раз подключать Dll что-ли. У меня есть прога, так там по нажатию одной кнопки подгружается Dll, а по другой функции из него но как? У меня же несколько функции и несколько кнопок(на каждую функцию).
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Например, инициализируй DLL в конструкторе формы, а переменные типа HINSTANCE Dll func modFunc Сделай членами класса. Если в проге только 1 форма можно разместить в ней. Если форм много, то можно создать глобальный объект собственного класса, в котором можно держать все глобальные переменные. Можно просто глобальными переменными (многими считается некорректным с точки зрения ООП подходом) Приложение запускается, инициализирует DLL, далее происходит работа с ней, перед выходом - освобождается. Если DLL нужна только на отдельном участке программы - тогда можно инициализовать в конструкторе формы, использующей библиотеку. Все зависит от конкретных задач. |
|||
|
||||
| Любаша |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Я конечно все понимаю, но с С++ Builder-oм встретилась 2 недели назад. подскажите как попроще!
На форме три кнопки, как для каждой подключить функцию из Dll(Dll подключается отдельной кнопкой). |
|||
|
||||
| Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
В описании класса формы в разделе protected: добавь две переменные:
HINSTANCE Dll; func modFunc; Там же в h файле (выше объявления класса формы укажи все типы используемых из DLL функций, здесь ты использовала пока только одну: typedef float (*func)(float re_1,float re_2,float im_1,float im_2); В конструкторе формы или в обработчике события FormCreate напиши код инициализации DLL:
В обработчике OnClose напиши функцию освобождения от DLL
В обработчиках кнопок вызывай modFunc как тебе угодно Добавлено @ 13:13 При моем подходе кнопка подключения DLL будет не нужна. Если хочешь подключать именно по кнопке - значит перенеси код из конструктора в кнопку, а в конструкторе только оставь строку Dll = 0; - Чтобы по умолчанию считалось, что DLL не загружена |
||||
|
|||||
| Любаша |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
большое спасибо. буду пробовать.
|
|||
|
||||
| Любаша |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Огромное всем СПАСИБО.
ВСЕ ПОЛУЧИЛОСЬ!!! |
|||
|
||||
| koza |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 31.8.2006 Где: Планета Земля Репутация: нет Всего: нет |
Не понятно
А как потом пользоваться этим указателем modFunc на функцию?? |
|||
|
||||
| stmamont |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 343 Регистрация: 13.3.2004 Где: влг Репутация: 3 Всего: 3 |
koza, так же как и обычным именем функции
|
|||
|
||||
| koza |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 31.8.2006 Где: Планета Земля Репутация: нет Всего: нет |
Короче, пятый день с этими дллками мучуусь, а ничего не работает
Может есь у кого нормально работающий пример (исходники)? |
|||
|
||||
| stmamont |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 343 Регистрация: 13.3.2004 Где: влг Репутация: 3 Всего: 3 |
Выше в этой теме были написаны примеры, осталось файлы создать и откомпилить))
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |