На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Вызов классов из dll
Добрый вечер, решил перенести свой проект из Visual Studio 6.0 (да-да я ретроград :) ) в Visual Studio 2013. Возникла проблема следующего характера, у меня есть общая dll в которой находятся классы элементов управления производные от стандартных с расширенным функционалом. Не могу разобраться как их правильно объявить, чтобы использовать dll.
Так же как и раньше. не совсем понятно что у тебя не получается.
В 6-й студии сделано вот так:

Объявление класса:
ExpandedWrap disabled
    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();


Сам класс:

ExpandedWrap disabled
    CStaticEx::CStaticEx()
    {
    }
     
    CStaticEx::~CStaticEx()
    {
    }


Подключаю к своему проекту dll как обычно:
ExpandedWrap disabled
    #pragma comment(lib,"common.lib")
    #include "common.h"


И пользуюсь своими контролами
Ну так у тебя в новом проекте поди не определен AFX_EXT_CLASS, который должен быть либо __declspec(dllexport) либо __declspec(dllimport)
Ну и плюс, не
ExpandedWrap disabled
        #pragma comment(lib,"common.lib")
        #include "common.h"

А
ExpandedWrap disabled
        #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
Помогло только добавление __declspec(dllexport) в реализацию класса

Добавлено
Поторопился я, при компиляции проги пишет что не найдена точка входа в процедуру
Цитата 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)
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,0924 ]   [ 20 queries used ]   [ Generated: 15.08.18, 03:41 GMT ]