Russian Qt Forum
Ноябрь 25, 2024, 04:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Подскажите как правильно использовать dll  (Прочитано 4150 раз)
sibmail
Гость
« : Июнь 01, 2011, 07:21 »

есть сторонняя dll например addfun.dll.  по книжкам понял что один из способов через QLibrary.
в *.h прописал
Код:
QLibrary lib;
typedef int (*WaveFilePlay)(const char* fileName);  // WaveFilePlay - функция из addfun.dll
WaveFilePlay myWaveFilePlay;

в конструкторе *.cpp
Код:
WaveFilePlay myWaveFilePlay = (AddSoundToList) lib.resolve("WaveFilePlay");
myWaveFilePlay("test.wav"); // - отрабатывает нормально

НО если я вызову в другом слоте myWaveFilePlay("test.wav"); - выдает ошибку.

если пропишу в этом слоте так:
WaveFilePlay myWaveFilePlay = (AddSoundToList) lib.resolve("WaveFilePlay");
myWaveFilePlay("test.wav");
то все нормально.

Мне вот не понятно неужели каждый раз надо писать WaveFilePlay myWaveFilePlay = (AddSoundToList) lib.resolve("WaveFilePlay") Непонимающий

Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Июнь 01, 2011, 08:12 »

1) WaveFilePlay - тип.
WaveFilePlay myWaveFilePlay - локальная переменная, которая перекрывает глобальную и исчезает как только выходим за область её видимости.
2) Почему приводим к типу AddSoundToList, если у нас тип WaveFilePlay?

Не видя полный код судить трудно, но догадываюь, что код в конструкторе должен выглядеть так:
Цитировать
myWaveFilePlay = (WaveFilePlay) lib.resolve("WaveFilePlay");
myWaveFilePlay("test.wav");
Записан
sibmail
Гость
« Ответ #2 : Июнь 01, 2011, 09:51 »

моя ошибка.
понял спасибо, заработало.
в конструкторе:
myWaveFilePlay = (WaveFilePlay) lib.resolve("WaveFilePlay");

в слотах
myWaveFilePlay("test.wav");

а теперь другой вопрос. как мне воспользоваться другим способом через pro файл.
название addfun.dll. как правильно прописать LIBS += -laddfun
но мне пишет файл не найден
и как в таком случае мне описывать функции?
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Июнь 01, 2011, 10:06 »

а теперь другой вопрос. как мне воспользоваться другим способом через pro файл.
название addfun.dll. как правильно прописать LIBS += -laddfun
но мне пишет файл не найден

1. Чтобы линкер нашел библиотеку - нужно прописать к ней путь в *.pro файле (помимо имени библиотеки).
Или же (если не хотим путь, а только имя) скопировать библиотеку в /system32  Улыбающийся , но этого ненада делать.
2. Чтобы после успешной компиляции приложение запустилось, необходимо эту библиотеку (перед запуском приложения)
скопировать в директорию с екзешкой приложения.

Цитировать
и как в таком случае мне описывать функции?
Они должны быть описаны в заголовочном файле, который "поставляется" с библиотекой.
И в этом файле (как в обычном заголовочном) должны быть перечислены все функции, классы, и т.п. которые
предоставляются библиотекой.
Подключаем (через include) этот файл куда надо и работаем.

ЗЫ: Сколько можно задавать такие вопроты то. А? Ну неужели так сложно воспользоваться поиском?  Злой
« Последнее редактирование: Июнь 01, 2011, 10:08 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
sibmail
Гость
« Ответ #4 : Июнь 01, 2011, 11:09 »

1. пример напиши
2. -
3. без примера разговор не очем

ЗЫ. сколько надо столько буду задавать. или можешь убить себя.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Июнь 01, 2011, 11:20 »

 Шокированный

Цитировать
1. пример напиши
С какого ражна? Гони 10$ - напишу.

Цитировать
2. -
3. без примера разговор не очем
Тебе нужно - ты и ищи примеры.

Цитировать
ЗЫ. сколько надо столько буду задавать. или можешь убить себя.
О как!  Смеющийся

ЗЫ: А грубить не нужно.

« Последнее редактирование: Июнь 01, 2011, 11:22 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Июнь 01, 2011, 11:26 »

1. пример напиши
2. -
3. без примера разговор не очем

ЗЫ. сколько надо столько буду задавать. или можешь убить себя.
Go back to school  Улыбающийся
Записан
galeks
Гость
« Ответ #7 : Июнь 01, 2011, 13:53 »


ЗЫ. сколько надо столько буду задавать. или можешь убить себя.

OMG!!!
Записан
iks
Гость
« Ответ #8 : Июнь 13, 2011, 09:40 »

а по форуму поискать ни как? Недавно отвечал, простой пример http://www.prog.org.ru/index.php?topic=18321.msg124013#new
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.