Russian Qt Forum

Qt => Общие вопросы => Тема начата: pau от Декабрь 07, 2008, 12:24



Название: Доступ к DLL из QT
Отправлено: pau от Декабрь 07, 2008, 12:24
Добрый день, коллеги.
Прошу прощения за вопрос - скорее всего более чем банальный.
Есть класс в dll, написанный под win32.

Код:
// mylib.dll, mylib.h
class MyClass
{
public:
MyClass();
~MyClass():
int MyFunction(int i);
};

Как мне использовать этот класс в приложении QT? Если можно, покажите пожалуйста пример кода и расскажите про настройку компилятора. Заранее большое спасибо.


Название: Re: Доступ к DLL из QT
Отправлено: ритт от Декабрь 07, 2008, 15:31
1.
Цитировать
class MyClass
замени на:
Цитировать
#ifdef Q_OS_WIN
#   ifdef MYLIB_BUILD
#      define MYLIB_EXPORT __declspec(dllexport)
#   else
#      define MYLIB_EXPORT __declspec(dllimport)
#   endif
#endif
#ifndef MYLIB_EXPORT
#   define MYLIB_EXPORT
#endif

class MYLIB_EXPORT MyClass
и компиляй либу с -DMYLIB_BUILD

2. в .pro (или .pri)-файл проекта добавь:
Цитировать
HEADERS += mylib.h
LIBS += -lmylib

3. в сорцах перед использованием напиши:
Цитировать
#include "mylib.h"


Название: Re: Доступ к DLL из QT
Отправлено: pau от Декабрь 07, 2008, 20:14
спасибо. попробую


Название: Re: Доступ к DLL из QT
Отправлено: BaltikS от Декабрь 07, 2008, 20:43
не, Константин написал как создать DLL...
А для её использования использовать надо QLibrary.... в асситенте пример вызова есть.


Название: Re: Доступ к DLL из QT
Отправлено: spirit от Декабрь 07, 2008, 20:48
не, Константин написал как создать DLL...
А для её использования использовать надо QLibrary.... в асситенте пример вызова есть.

вот и использование
Цитировать
2. в .pro (или .pri)-файл проекта добавь:
Quote
HEADERS += mylib.h
LIBS += -lmylib

3. в сорцах перед использованием напиши:
Quote
#include "mylib.h"


Название: Re: Доступ к DLL из QT
Отправлено: BaltikS от Декабрь 07, 2008, 20:52
А, не прочёл до конца, там же класс, а не функция... Всё верно...при условии что имеется lib-файл.


Название: Re: Доступ к DLL из QT
Отправлено: pau от Декабрь 08, 2008, 09:02
1.
Цитировать
class MyClass
замени на:
Цитировать
#ifdef Q_OS_WIN
#   ifdef MYLIB_BUILD
#      define MYLIB_EXPORT __declspec(dllexport)
#   else
#      define MYLIB_EXPORT __declspec(dllimport)
#   endif
#endif
#ifndef MYLIB_EXPORT
#   define MYLIB_EXPORT
#endif

class MYLIB_EXPORT MyClass
т.е. правильно ли я понимаю - если определено Q_OS_WIN то Qt понимает __declspec(dllexport/dllimport) ?
а можно ли загрузить dll используя что-то типа LoadLibrary и как в этом случае прописать функции?
опять заранее большое спасибо.


Название: Re: Доступ к DLL из QT
Отправлено: spirit от Декабрь 08, 2008, 09:05
вот человек предложил использовать QLibrary (http://doc.trolltech.com/4.4/qlibrary.html)
не, Константин написал как создать DLL...
А для её использования использовать надо QLibrary.... в асситенте пример вызова есть.


Название: Re: Доступ к DLL из QT
Отправлено: ритт от Декабрь 08, 2008, 09:35
ой, мой недочёт - вместо #ifdef Q_OS_WIN нужно писать что-то вроде #ifdef _WIN, т.к. Q_OS_WIN - кутэшный дефайн...
кутэ не понимает __declspec(dllexport/dllimport) - его понимает компилятор


Название: Re: Доступ к DLL из QT
Отправлено: pau от Декабрь 08, 2008, 11:47
ой, мой недочёт - вместо #ifdef Q_OS_WIN нужно писать что-то вроде #ifdef _WIN, т.к. Q_OS_WIN - кутэшный дефайн...
кутэ не понимает __declspec(dllexport/dllimport) - его понимает компилятор

а-а-а ... вот теперь понятно. конечно компилятор - я имел ввиду не Microsoft компилятор :)