Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.225.11.98] |
|
Сообщ.
#1
,
|
|
|
Добрый вечер, решил перенести свой проект из Visual Studio 6.0 (да-да я ретроград ) в Visual Studio 2013. Возникла проблема следующего характера, у меня есть общая dll в которой находятся классы элементов управления производные от стандартных с расширенным функционалом. Не могу разобраться как их правильно объявить, чтобы использовать dll.
|
Сообщ.
#2
,
|
|
|
Так же как и раньше. не совсем понятно что у тебя не получается.
|
Сообщ.
#3
,
|
|
|
В 6-й студии сделано вот так:
Объявление класса: class AFX_EXT_CLASS CStaticEx : public CStatic { // Construction public: CStaticEx(); // Attributes public: struct_static struct_st; // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CStaticEx) //}}AFX_VIRTUAL // Implementation public: virtual ~CStaticEx(); Сам класс: CStaticEx::CStaticEx() { } CStaticEx::~CStaticEx() { } Подключаю к своему проекту dll как обычно: #pragma comment(lib,"common.lib") #include "common.h" И пользуюсь своими контролами |
Сообщ.
#4
,
|
|
|
Ну так у тебя в новом проекте поди не определен AFX_EXT_CLASS, который должен быть либо __declspec(dllexport) либо __declspec(dllimport)
Ну и плюс, не #pragma comment(lib,"common.lib") #include "common.h" А #include "common.h" #pragma comment(lib,"common.lib") Добавлено Вот тут более подробно описано: https://msdn.microsoft.com/ru-ru/library/9xyb5w93.aspx Исходя из справки в MSDN, у тебя в DLL должен быть объявлен макрос: Цитата Библиотека MFC определяет макрос в качестве __declspec(dllexport), когда определяются символы предпроцессора _AFXDLL и _AFXEXT А в проекте, который использует DLL, должен быть объявлен только макрос - _AFXDLL |
Сообщ.
#5
,
|
|
|
Помогло только добавление __declspec(dllexport) в реализацию класса
Добавлено Поторопился я, при компиляции проги пишет что не найдена точка входа в процедуру |
Сообщ.
#6
,
|
|
|
Цитата Sander @ Помогло только добавление __declspec(dllexport) в реализацию класса Объявление этих макросов -> _AFXDLL и _AFXEXT как раз и добавляет __declspec(dllexport). Если просто объявишь макрос _AFXDLL - то будет __declspec(dllimport). Я думаю тебе нужно почитать литературу о том, как экспортируются/импортируются функции из DLL. Можешь начать например отсюда -> http://rsdn.org/article/baseserv/dlluse.xml?print Добавлено Если что, на всякий случай. Эти макросы нужно добавлять в опциях проекта DLL и приложения, которое использует DLL. В опциях проекта -> Project Properties->C/C++->Preprocessor->Preprocessor Definitions. Для проекта DLL нужно добавить туда _AFXDLL и _AFXEXT Для проекта, который использует DLL, нужно добавить туда _AFXDLL Добавлено Вот тут даже пример есть готовый: https://docs.microsoft.com/ru-ru/previous-v...ezhh3d(v=vs.90) |
Сообщ.
#7
,
|
|
|
Уважаемый Wound большое тебе спасибо! Со всем разобрался, тему можно закрывать.
|