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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Доступ к DLL из QT  (Прочитано 7505 раз)
pau
Гость
« : Декабрь 07, 2008, 12:24 »

Добрый день, коллеги.
Прошу прощения за вопрос - скорее всего более чем банальный.
Есть класс в dll, написанный под win32.

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

Как мне использовать этот класс в приложении QT? Если можно, покажите пожалуйста пример кода и расскажите про настройку компилятора. Заранее большое спасибо.
Записан
ритт
Гость
« Ответ #1 : Декабрь 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"
« Последнее редактирование: Декабрь 07, 2008, 15:33 от Константин » Записан
pau
Гость
« Ответ #2 : Декабрь 07, 2008, 20:14 »

спасибо. попробую
Записан
BaltikS
Гость
« Ответ #3 : Декабрь 07, 2008, 20:43 »

не, Константин написал как создать DLL...
А для её использования использовать надо QLibrary.... в асситенте пример вызова есть.
Записан
spirit
Гость
« Ответ #4 : Декабрь 07, 2008, 20:48 »

не, Константин написал как создать DLL...
А для её использования использовать надо QLibrary.... в асситенте пример вызова есть.

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

3. в сорцах перед использованием напиши:
Quote
#include "mylib.h"
Записан
BaltikS
Гость
« Ответ #5 : Декабрь 07, 2008, 20:52 »

А, не прочёл до конца, там же класс, а не функция... Всё верно...при условии что имеется lib-файл.
« Последнее редактирование: Декабрь 07, 2008, 21:01 от BaltikS » Записан
pau
Гость
« Ответ #6 : Декабрь 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 и как в этом случае прописать функции?
опять заранее большое спасибо.
Записан
spirit
Гость
« Ответ #7 : Декабрь 08, 2008, 09:05 »

вот человек предложил использовать QLibrary
не, Константин написал как создать DLL...
А для её использования использовать надо QLibrary.... в асситенте пример вызова есть.
Записан
ритт
Гость
« Ответ #8 : Декабрь 08, 2008, 09:35 »

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

ой, мой недочёт - вместо #ifdef Q_OS_WIN нужно писать что-то вроде #ifdef _WIN, т.к. Q_OS_WIN - кутэшный дефайн...
кутэ не понимает __declspec(dllexport/dllimport) - его понимает компилятор

а-а-а ... вот теперь понятно. конечно компилятор - я имел ввиду не Microsoft компилятор Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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