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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Пример создания .dll c помощью VC для клиента на qt. неявное связывание  (Прочитано 6170 раз)
libertas
Гость
« : Март 19, 2014, 14:47 »

Здравствуйте, может у кого есть пример создания .dll c помощью VC для клиента на qt, неявное связывание?

Спасибо.
Записан
OKTA
Гость
« Ответ #1 : Март 19, 2014, 14:50 »

берешь студию, создаешь новый проект, выбираешь в тэмплейтах библиотеку...  Непонимающий
Записан
libertas
Гость
« Ответ #2 : Март 19, 2014, 14:56 »

Код:
берешь студию, создаешь новый проект, выбираешь в тэмплейтах библиотеку...

Это я сделал, спасибо.

А вот дальше не понимаю.

Написал вот такой код в хедере:

Код:
#ifdef IMPLICITBINDINGDLL_EXPORTS
#define IMPLICITBINDINGDLL_API __declspec(dllexport)
#else
#define IMPLICITBINDINGDLL_API __declspec(dllimport)
#endif

extern "C" {
#ifdef IMPLICIT
__declspec(dllexport) double add(double, double);
#else
Q_DECL_IMPORT double add(double, double);
#endif
}

И не понимаю в нем, что значить IMPLICIT, а Q_DECL_IMPORT - у меня подсвечивает компилятор как this declaration has no storage class or type specifier.

И не знаю куда мне нужно файлы библиотеки сохранять, чтоб потом можно было удобно импортировать их в клиента.
Записан
OKTA
Гость
« Ответ #3 : Март 19, 2014, 15:11 »

Ты вроде недавно это уже делал, только в креаторе... Что теперь изменилось? зачем студия понадобилась? И зачем такой код написал, если не понимаешь?  Непонимающий
Записан
libertas
Гость
« Ответ #4 : Март 19, 2014, 15:14 »

Код:
Что теперь изменилось? зачем студия понадобилась? И зачем такой код написал, если не понимаешь?

У меня это лабораторная в институте. И такое задание. А код такой написал, потому что он был в качестве образца в лаб. с чего начать=)
Записан
OKTA
Гость
« Ответ #5 : Март 19, 2014, 15:28 »

Тебе нужна просто библиотека, как раньше?  Не использующая Qt? Если да, то вот мануал тебе http://life-prog.ru/view_zam.php?id=189&cat=2&page=3
« Последнее редактирование: Март 19, 2014, 15:32 от OKTA » Записан
libertas
Гость
« Ответ #6 : Март 19, 2014, 15:43 »

Код:
мануал тебе http://life-prog.ru/view_zam.php?id=189&cat=2&page=3

за мануал спасибо. почитаю.

А мне нужно, чтоб библиотеку написаннуя в visual studio можно использовать в qt проекте.
Записан
libertas
Гость
« Ответ #7 : Март 20, 2014, 09:11 »

Я создал библиотеку. Как загрузчик ОС сможет найти мою библиотеку? Точнее, где мне можно её разместить, чтоб загрузчик ОС её нашел при запуске клиента?
Записан
Bepec
Гость
« Ответ #8 : Март 20, 2014, 09:21 »

Эмм... Загрузчик ОС будет использовать вашу библиотеку?
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #9 : Март 20, 2014, 09:25 »

Я создал библиотеку. Как загрузчик ОС сможет найти мою библиотеку? Точнее, где мне можно её разместить, чтоб загрузчик ОС её нашел при запуске клиента?
Рядом с клиентом положите или в любую из директорий прописанных в PATH.
Записан
OKTA
Гость
« Ответ #10 : Март 20, 2014, 09:26 »

Смеющийся Смеющийся Смеющийся стоит положить в папочку с exe-шником
А насчет загрузчика ОС - осторожнее с выражениями  Смеющийся Смеющийся http://ru.wikipedia.org/wiki/NTLDR
Записан
libertas
Гость
« Ответ #11 : Март 20, 2014, 09:31 »

Код:
Загрузчик ОС будет использовать вашу библиотеку?

Я сделал так:
din_lib.h :

Код:
extern "C" {
#ifdef IMPLICIT
__declspec(dllexport) double add(double, double);
#else
Q_DECL_IMPORT double add(double, double);
#endif
}

din_lib.cpp
Код:
#include "stdafx.h"
#include "din_lib.h"

extern "C" {
#ifdef IMPLICIT
__declspec(dllexport) double add(double first, double second){
return first + second;
}
#else
Q_DECL_IMPORT double add(double first, double second) {
return first + second;
#endif
}
Собрал библиотеку. У меня появились 4 файла: din_lib.exp, din_lib.lib, din_lib.pdb, din_lib.dll Я их разместил в папке:
"D:\Temp\C++\QT_labs\lib"

В файле client_dll.pro в qt проекте указал:
Код:
INCLUDEPATH += D:/Temp/C++/project/din_lib/din_lib/ #путь до хедера

LIBS += D:/Temp/C++/QT_labs/lib/din_lib.lib #путь до библиотеки

Но при запуске приложения на qt он :

Starting D:\Temp\C++\QT_labs\client_dll\debug\client_dll.exe...
The program has unexpectedly finished.
D:\Temp\C++\QT_labs\client_dll\debug\client_dll.exe crashed

Вот я и подумал, что загрузчик ОС не может найти мою библиотеку...Поправьте, если ошибаюсь..
Записан
libertas
Гость
« Ответ #12 : Март 20, 2014, 10:14 »

Все, разобрался.

Разместил файл библиотеки в проекте клиента и прописал путь к ней в client_dll.pro

LIBS += D:/Temp/C++/QT_labs/client_dll/din_lib.lib

и все заработало. Судя по всему оттуда загрузчик ОС может взять библиотеку.
Записан
Bepec
Гость
« Ответ #13 : Март 20, 2014, 10:24 »

Тьфу блин, этот лексикон юных меня доканает Веселый А я голову ломал, что он собирает с системой делать Веселый
Записан
OKTA
Гость
« Ответ #14 : Март 21, 2014, 10:06 »

Код:
Загрузчик ОС будет использовать вашу библиотеку?

Я сделал так:
din_lib.h :

Код:
extern "C" {
#ifdef IMPLICIT
__declspec(dllexport) double add(double, double);
#else
Q_DECL_IMPORT double add(double, double);
#endif
}

din_lib.cpp
Код:
#include "stdafx.h"
#include "din_lib.h"

extern "C" {
#ifdef IMPLICIT
__declspec(dllexport) double add(double first, double second){
return first + second;
}
#else
Q_DECL_IMPORT double add(double first, double second) {
return first + second;
#endif
}
Собрал библиотеку. У меня появились 4 файла: din_lib.exp, din_lib.lib, din_lib.pdb, din_lib.dll Я их разместил в папке:
"D:\Temp\C++\QT_labs\lib"

В файле client_dll.pro в qt проекте указал:
Код:
INCLUDEPATH += D:/Temp/C++/project/din_lib/din_lib/ #путь до хедера

LIBS += D:/Temp/C++/QT_labs/lib/din_lib.lib #путь до библиотеки

Но при запуске приложения на qt он :

Starting D:\Temp\C++\QT_labs\client_dll\debug\client_dll.exe...
The program has unexpectedly finished.
D:\Temp\C++\QT_labs\client_dll\debug\client_dll.exe crashed

Вот я и подумал, что загрузчик ОС не может найти мою библиотеку...Поправьте, если ошибаюсь..

Не, тут что-то другое. Без .lib файла клиент просто не собрался бы. Линкер должен ругаться на udefined reference.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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