Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
6 / 6 / 1
Регистрация: 27.11.2012
Сообщений: 160

Создать dll с классом

18.10.2014, 10:59. Показов 4835. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется класс(хедер файл)
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#ifndef RECTANGLE_H
#define RECTANGLE_H
 
#include "d:\my_programs\OOP\2\1\paint.h"
namespace myFigures {
class Rectangle : public Segment
{
 
private:
    friend class boost::serialization::access;
 
public:
    template<class A>
    void serialize(A & ar, const unsigned int version)
    {
        boost::serialization::base_object<Figures>(*this);
        ar & BOOST_SERIALIZATION_NVP(point0);
        ar & BOOST_SERIALIZATION_NVP(point1);
    }
 
    Rectangle() {/*empty*/}
    Rectangle(int, int, int, int);
    virtual void draw(HDC);
};
    
}
#endif
и его реализация(срр) :
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "RectangleDLL.h"
 
myFigures::Rectangle::Rectangle(int x0, int y0, int x1, int y1)
{
        point0.x = x0;
        point0.y = y0;
        point1.x = x1;
        point1.y = y1;
}
void myFigures::Rectangle::draw(HDC hdc)
{
    MoveToEx(hdc, point0.x, point0.y, NULL);
    LineTo(hdc, point0.x, point1.y);
    LineTo(hdc, point1.x, point1.y);
    LineTo(hdc, point1.x, point0.y);
    LineTo(hdc, point0.x, point0.y);    
}
как мне правильно запихать этот класс в dll и потом создать объект этого класса ? VS 2012

Добавлено через 13 часов 23 минуты
ап.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.10.2014, 10:59
Ответы с готовыми решениями:

Создать программу с классом
Создать класс участник соревнований со свойствами: страна, вид спорта, фамилия участника. Определить для класса следующие конструкторы без...

По аналогии с классом cstack создать стек
По аналогии с классом cstack создать стек. С помощью созданного класса отсортировать массив, разными способами. Массив содержит &gt; 100...

Создать иерархию наследования с абстрактным базовым классом
Доброго времени суток! Помогите, пожалуйста, сделать: 2) Создать абстрактный базовый класс с виртуальной функцией &quot;Площадь&quot;....

12
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
18.10.2014, 11:12
DLL имеет возможность экспортировать только функции.
Поэтому напрямую такое реализовать нельзя.

Но раздельную компиляцию сделать можно.
Поместите файл с реализации и файл с программой в один проект.
0
6 / 6 / 1
Регистрация: 27.11.2012
Сообщений: 160
18.10.2014, 11:40  [ТС]
zss, а как это не напрямую ?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
18.10.2014, 11:45
Из dll можно экспортировать не только функции, но и классы, и переменные.
В Visual C++, например, это делается с помощью __declspec(dllexport).

Exporting from a DLL Using __declspec(dllexport)
http://msdn.microsoft.com/ru-r... k134d.aspx

dllexport, dllimport
http://msdn.microsoft.com/ru-r... sfaz2.aspx
1
6 / 6 / 1
Регистрация: 27.11.2012
Сообщений: 160
18.10.2014, 11:58  [ТС]
Убежденный, хмм, не получалось так сделать, lnk ругался, но переместил описание конструктора в описание и построилось .
а как теперь это чудо извлечь и использовать ?
и как побороть эти warning'и ?
Кликните здесь для просмотра всего текста
не являющийся dll-интерфейсом, использован в качестве базового для dll-интерфейса class "myFigures::Rectangle"
несовместимая компоновка dll
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
18.10.2014, 12:56
Лучший ответ Сообщение было отмечено luciys как решение

Решение

luciys, для импорта клиентский код должен подключить
заголовок класса с __declspec(dllimport), а также библиотеку импорта (.lib).
Могут возникнуть проблемы с шаблонами, например, выдача сообщений
вроде такого "non – DLL-interface classkey 'identifier' used as base for DLL-interface
classkey 'identifier'" или такого: "'identifier' : class 'type' needs to have
dll-interface to be used by clients of class 'type2'". По этой причине экспорт
часто делается в стиле C (только функции), либо через pimpl.
1
6 / 6 / 1
Регистрация: 27.11.2012
Сообщений: 160
18.10.2014, 13:13  [ТС]
Убежденный, .lib это же статическая ? а как именно с динамической ?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
18.10.2014, 13:16
.lib - это может быть либо статическая библиотека (подключаемый код
целиком находится в ней), либо библиотека импорта (ссылка на код,
который находится в dll).
1
6 / 6 / 1
Регистрация: 27.11.2012
Сообщений: 160
18.10.2014, 17:10  [ТС]
Убежденный, всё собралось и работает, спасибо )
только пришлось наследовать от базового(абстрактный, полей не содержит) класса, т.к. ругается :
Миниатюры
Создать dll с классом  
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
18.10.2014, 17:12
Оффтопом:
почему все так любят русифицированные IDE ?
не для того ли, чтобы потом наблюдать такие вот сообщения ?
0
6 / 6 / 1
Регистрация: 27.11.2012
Сообщений: 160
18.10.2014, 20:21  [ТС]
Убежденный,

Не по теме:

может по той же причине, по которой мы с Вами разговариваем на русском ? )
а так просто страх перед английским из-за его незнания заставил поставить русскую .
интересно что за ошибки линковки, скачал с оф сайта "англофикатор" и пропал ряд стандартных либ =\

0
6 / 6 / 1
Регистрация: 27.11.2012
Сообщений: 160
18.10.2014, 21:18  [ТС]
Убежденный,
Миниатюры
Создать dll с классом  
0
6 / 6 / 1
Регистрация: 27.11.2012
Сообщений: 160
18.10.2014, 22:13  [ТС]
решено : всего-то нужно было добавить в компиляцию нужные срр файлы (point.cpp && segment.cpp)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.10.2014, 22:13
Помогаю со студенческими работами здесь

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями?
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете искал 64-битные версии ogg.dll, vorbis.dll...

Создать .dll либу
Добрый день, препод тупо кинул вот такой текст задания, которое студенты прошлых лет раньше делали на Делфи, а сейчас (т.к. у нас был...

Как создать DLL в с++
Добрый день - вообщем прочитал тут книжку про создание DLL в с++ но не могу ее создать расматриваю такой вариант (динамическое подключение)...

Как создать dll на VS2010?
Добрый день! Уважаемые спец. помогите горю, леплю dll на VS2010 prof.rus для VB6 /

Можно ли в DLL создать поток?
Мне необходимо создать DLL, в котором был бы отдельный поток Windows. Однако, как выяснилось, это не так просто как в случае с приложением....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru