Форум программистов, компьютерный форум CyberForum.ru

Экспорт класса DLL - C++

Восстановить пароль Регистрация
 
Brendon
Заблокирован
17.08.2014, 16:00     Экспорт класса DLL #1
Привет
Есть DLL:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
 
class DLL_API CDll {
public:
    CDll(void);
    int XXX();
};
 
extern "C" DLL_API CDll* GetPointer();

Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include "Dll.h"
 
DLL_API CDll* GetPointer()
{
    return new CDll();
}
 
CDll::CDll()
{   
}
 
int CDll::XXX()
{
    return 777;
}

В коде пытаюсь использовать функции экспортируемого из DLL класса:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "stdafx.h"
#include "../Dll/Dll.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    HMODULE hModul = LoadLibrary(L"Dll.dll");
    if (hModul)
    {
        typedef CDll* (WINAPI *GetPointer)(void);
        GetPointer pointer = (GetPointer)GetProcAddress(hModul, "fnDll");
        CDll *dll = pointer();
        int x = dll->XXX();     
    }
 
    return 0;
}

но компилятор не даёт это сделать и пишет:
error LNK2019: unresolved external symbol "__declspec(dllimport) public: int __thiscall CDll::XXX(void)" (__imp_?XXX@CDll@@QAEHXZ) referenced in function _wmain

В чём фикус - то?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
17.08.2014, 16:28     Экспорт класса DLL #2
Если совсем по простому

Не по теме:

Цитата Сообщение от Brendon Посмотреть сообщение
В чём фикус - то?
- если вркатце - ты собрался достать нестатическую функцию класса

Миниатюры
Экспорт класса DLL  
Вложения
Тип файла: rar ClassExport.rar (1.20 Мб, 16 просмотров)
Тип файла: rar ClassImport.rar (2.31 Мб, 17 просмотров)
Brendon
Заблокирован
17.08.2014, 16:33  [ТС]     Экспорт класса DLL #3
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
если вркатце - ты собрался достать нестатическую функцию класса
Чего?

Что за охинею ты тут понаписывал Ты в своём примере подключаешь статическую библиотеку, да и вообще, ты сверху, над функцией main описал класс и в main его статический используешь ... Посмотри внимательней в мой случай, как мне - то проблему решить?
-=ЮрА=-
Заблокирован
Автор FAQ
17.08.2014, 16:47     Экспорт класса DLL #4
Цитата Сообщение от Brendon Посмотреть сообщение
Ты в своём примере подключаешь статическую библиотеку, да и вообще, ты сверху, над функцией main описал класс и в main его статический используешь ... Посмотри внимательней в мой случай, как мне - то проблему решить?
- я импортирую твой класс из длл(неявное подключение если не слышал )
Brendon
Заблокирован
17.08.2014, 17:04  [ТС]     Экспорт класса DLL #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
я импортирую твой класс из длл,
ты статическую либу подключаешь )))))

Добавлено через 6 минут
так кто - то может помочь мне с проблемой в первом посте ?
-=ЮрА=-
Заблокирован
Автор FAQ
17.08.2014, 17:20     Экспорт класса DLL #6
Цитата Сообщение от Brendon Посмотреть сообщение
ты статическую либу подключаешь )))))
- да ты что,
http://msdn.microsoft.com/ru-ru/library/9yd93633.aspx
http://msdn.microsoft.com/ru-ru/library/d14wsce5.aspx
попробуй удалить из папки проекта dll-ку.
Цитата Сообщение от Brendon Посмотреть сообщение
так кто - то может помочь мне с проблемой в первом посте ?
- уж точно показывать явное подключение тебе не стану.
Brendon
Заблокирован
17.08.2014, 18:01  [ТС]     Экспорт класса DLL #7
Что - то я вообще усомнился в возможности экспорта класса из динамической библиотеки...
Кто - нибуть может объяснить, что тут делает префикс DLL_API класса ? Как этот класс ипортировать в основной программе ?
C++
1
2
3
4
5
6
7
8
9
10
11
#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
 
class DLL_API CDll {
public:
    CDll(void);
    int XXX();
};
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
17.08.2014, 19:03     Экспорт класса DLL #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Brendon Посмотреть сообщение
Что - то я вообще усомнился в возможности экспорта класса из динамической библиотеки...
Не забудь добавить в dll в свойства проекта препроцессорное предопределение DLL_EXPORTS.
Функцию XXX надо бы сделать виртуальной.
Остальное вроде все правильно. По поводу волшебного условия с DLL_EXPORTS, можешь тут почитать, я не собираюсь еще раз все это писать
Brendon
Заблокирован
17.08.2014, 19:06  [ТС]     Экспорт класса DLL #9
По сути дела я могу импортировать класс из загруженной DLL только если я подгружу в проект так же статическую версию этой DLL, то есть LIB файл, но какой - тогда прок от этой DLL, если она всё равно в код вкомпилится, единственный плюс - можно выгрузить её и заново загрузить.
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
17.08.2014, 19:10     Экспорт класса DLL #10
Цитата Сообщение от Brendon Посмотреть сообщение
По сути дела я могу импортировать класс из загруженной DLL только если я подгружу в проект так же статическую версию этой DLL
Я тебе выше написал способ, чтобы этого не делать
Попробуй.
Brendon
Заблокирован
17.08.2014, 19:19  [ТС]     Экспорт класса DLL #11
Цитата Сообщение от DrOffset Посмотреть сообщение
Не забудь добавить в dll в свойства проекта препроцессорное предопределение DLL_EXPORTS.
А оно там и так торчит по умолчанию про создание проекта DLL в 2013-й студии.
Цитата Сообщение от DrOffset Посмотреть сообщение
Функцию XXX надо бы сделать виртуальной.
ЧЁРТ ПОДЕРИ! Заработало! А почему эта функция должны быть виртуальной - то не пойму ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2014, 19:35     Экспорт класса DLL
Еще ссылки по теме:

C++ Экспорт шаблонной функции из DLL
Экспорт классов из dll библиотек (Visual Studio) C++
Создание экземпляра класса из DLL C++

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

Или воспользуйтесь поиском по форуму:
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
17.08.2014, 19:35     Экспорт класса DLL #12
Цитата Сообщение от Brendon Посмотреть сообщение
А почему эта функция должны быть виртуальной - то не пойму ?
Тут.
Yandex
Объявления
17.08.2014, 19:35     Экспорт класса DLL
Ответ Создать тему
Опции темы

Текущее время: 11:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru