Russian Qt Forum

Qt => Общие вопросы => Тема начата: sibmail от Июнь 01, 2011, 07:21



Название: Подскажите как правильно использовать dll
Отправлено: 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") ???



Название: Re: Подскажите как правильно использовать dll
Отправлено: LisandreL от Июнь 01, 2011, 08:12
1) WaveFilePlay - тип.
WaveFilePlay myWaveFilePlay - локальная переменная, которая перекрывает глобальную и исчезает как только выходим за область её видимости.
2) Почему приводим к типу AddSoundToList, если у нас тип WaveFilePlay?

Не видя полный код судить трудно, но догадываюь, что код в конструкторе должен выглядеть так:
Цитировать
myWaveFilePlay = (WaveFilePlay) lib.resolve("WaveFilePlay");
myWaveFilePlay("test.wav");


Название: Re: Подскажите как правильно использовать dll
Отправлено: sibmail от Июнь 01, 2011, 09:51
моя ошибка.
понял спасибо, заработало.
в конструкторе:
myWaveFilePlay = (WaveFilePlay) lib.resolve("WaveFilePlay");

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

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


Название: Re: Подскажите как правильно использовать dll
Отправлено: kuzulis от Июнь 01, 2011, 10:06
а теперь другой вопрос. как мне воспользоваться другим способом через pro файл.
название addfun.dll. как правильно прописать LIBS += -laddfun
но мне пишет файл не найден

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

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

ЗЫ: Сколько можно задавать такие вопроты то. А? Ну неужели так сложно воспользоваться поиском?  >:(


Название: Re: Подскажите как правильно использовать dll
Отправлено: sibmail от Июнь 01, 2011, 11:09
1. пример напиши
2. -
3. без примера разговор не очем

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


Название: Re: Подскажите как правильно использовать dll
Отправлено: kuzulis от Июнь 01, 2011, 11:20
 :o

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

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

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

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



Название: Re: Подскажите как правильно использовать dll
Отправлено: Igors от Июнь 01, 2011, 11:26
1. пример напиши
2. -
3. без примера разговор не очем

ЗЫ. сколько надо столько буду задавать. или можешь убить себя.
Go back to school  :)


Название: Re: Подскажите как правильно использовать dll
Отправлено: galeks от Июнь 01, 2011, 13:53

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

OMG!!!


Название: Re: Подскажите как правильно использовать dll
Отправлено: iks от Июнь 13, 2011, 09:40
а по форуму поискать ни как? Недавно отвечал, простой пример http://www.prog.org.ru/index.php?topic=18321.msg124013#new