![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
BraM's |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 2.7.2004 Репутация: нет Всего: 1 |
У меня получается (через extern "C") загружать из ДЛЛ-и функцию. А как мне теперь сделать так, чтобы оттуда же взять класс? Например, конструктор загрузить...
|
|||
|
||||
Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Самое простое - создай в ДЛЛке класс и возврати указатель на него. Как в ОЛЕ.
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Можно импортировать из длл хоть целый класс. Пример можно посмотреть, если создать проект Win32 Dynamic-Link Library, выбрав "DLL, which exports some symbols".
-------------------- ![]() |
|||
|
||||
BraM's |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 2.7.2004 Репутация: нет Всего: 1 |
mr.DUDA, пробовал... Но если потом начинать использовать эту длл, то он не экспортирует ничего.
|
|||
|
||||
BraM's |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 2.7.2004 Репутация: нет Всего: 1 |
Ау. Кто-нибудь скажите как это сделать?
|
|||
|
||||
AndyY |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
[b]BraM's[b]
Олег М дал тебе абсолютно правильный совет: описываешь интерфейс класса так:
в dll пишешь реализацию:
и функцию создания:
потом в проге юзаешь:
|
||||||||
|
|||||||||
mr.DUDA |
|
||||||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
AndyY, позвольте с Вами не согласиться. Зачем идти обходными путями ? Ведь экспортировать класс из длл можно, просто объявив его (класс) в заголовочном файле, со спецификатором __declspec(dllexport):
В cpp-файле написать реализацию этого класса (никакого наследования не требуется):
И, наконец, использовать этот класс в программе, подключающей длл. Для этого всего лишь потребуется подключить .h-файл (как и в Вашем примере) и библиотеку, создаваемую вместе с длл:
Вышеприведённый пример в виде проекта DLL+EXE можно скачать по ссылке (9 Кб): Присоединённый файл ( Кол-во скачиваний: 6 ) ![]() -------------------- ![]() |
||||||
|
|||||||
AndyY |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
mr.DUDA
Да, есть такой вариант. Мне ближе мой по таким причинам: 1. мы полностью развязываем интерфейс и реализацию (и можно использовать пару LoadLibrary/GetProcAddress). 2. технологию хорошо применять для написания плагинов к прогам (интерфейс один, несколько реализаций в разных dll). Но ваш безусловно тоже имеет право на жизнь, и, возможно, он действительно проще. |
|||
|
||||
46&two |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 6.2.2004 Репутация: нет Всего: нет |
mr.DUDA , ложка дегтя к вашему варианту:
![]() зачем огород городить, если в main файле все равно производится подключение #include "dll.h"? Что если моя программа на момент компиляции не знает, какие библиотеки и в каком количестве ей предстоит использовать, а знает лишь, какую директорию сканировать в поисках dll и динамически пытаться подключить их? Как вам такой вариант? ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |