Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Разнос" проекта по dll, есть у кого опыт 
:(
    Опции темы
Coocky
Дата 7.11.2005, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(bel_nikita @ 7.11.2005, 12:56)
Видать это я галочку на Automation выставил

Стоп,стоп стоп..
Дык при выбре MFC extension dll блокируется галочка Automation smile
Ты какой тип проекта создавал? smile



--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
bel_nikita
Дата 7.11.2005, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 2
Всего: 47



Цитата(Coocky @ 7.11.2005, 14:30)
[QUOTE=bel_nikita, 7.11.2005, 12:56]Дык при выбре MFC extension dll блокируется галочка Automation smile
Ты какой тип проекта создавал? smile

MFC extension создавал smile это точно.


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Coocky
Дата 7.11.2005, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(bel_nikita @ 7.11.2005, 15:48)
MFC extension создавал  это точно

Ну раз ТОЧНО, тогда я спокоен.. smile



--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
bel_nikita
Дата 7.11.2005, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 2
Всего: 47



Coocky
Еще раз попробывал. У меня ничего не блокируется. Могу бырать Automation и Win Sockets. Проект MFC Extension DLL.
Все это пробывалось на MSVC6 SP6.


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Earnest
Дата 8.11.2005, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Coocky
1) Dependencies - это команда Project->Dependencies, и там галки ставишь, что от чего зависит.
2) 20 и более проектов среда тянет легко.
3) Чтобы что-то экспортировать, нужно в объявлении функции или класса в источнике (DLL) написать __declspec(dllexport), а в клиенте (EXE) - __declspec(dllimport). Так как обычно объявления пишут в хедерах, и не хочется их дублировать для DLL и EXE, обычно делают что-то вроде (см. MFC):
Код

    #ifdef _AFXEXT
        #define AFX_EXT_API         __declspec(dllexport) 
    #else
        #define AFX_EXT_API         __declspec(dllimport) 
    #endif

При этом символ _AFXEXT у тебя определен в DLL (т.е. там ты имеешь экспорт). А в EXE - cоответственно, импорт.
Только для этого символ _AFXEXT и нужен.

НО: если есть некая общая DLL, функциями/классами которой пользуются другие (т.е. есть зависимость между библиотеками), такой фокус не пройдет. У обеих библиотек символ _AFXEXT определен - получается, все экспортируется - и свое, и чужое.
Тогда для каждой DLL нужно завести свой символ, и написать подобные объявления.

Скажем, есть DLL MegaSuperDLL. Для нее определяем символ _MEGASUPER (в параметрах препроцессора). Далее, создаем хедер MegaSuper.h:

Код

    #ifdef _MEGASUPER
        #define MEGASUPER_API         __declspec(dllexport) 
    #else
        #define MEGASUPER_API         __declspec(dllimport) 
    #endif


Далее, пишем класс, который будет экспортироваться:

Код

#include "MegaSuper.h"

class MEGASUPER_API CMyClass
{
};
 


В этом случае экспортируются все функции класса, а если надо экспортировать выборочно, то MEGASUPER_API пишем не у класса, а у определений этих функций.
Вот и все.


--------------------
...
PM   Вверх
Coocky
Дата 8.11.2005, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Earnest
Совсем запутали...
Смотри, что у bel_nikita
Файл Dll.h (библиотеки)
Код

class AFX_EXT_CLASS CDialogCoocky : public CDialog
{
// Construction
public:
    void Coocky_Is_You_Function();
    CDialogCoocky(CWnd* pParent = NULL);   // standard constructor

// Dialog Data
    //{{AFX_DATA(CDialogCoocky)
    //enum { IDD = IDD_DIALOG1 };
        // NOTE: the ClassWizard will add data members here
    //}}AFX_DATA


// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CDialogCoocky)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL

// Implementation
protected:

    // Generated message map functions
    //{{AFX_MSG(CDialogCoocky)
        // NOTE: the ClassWizard will add member functions here
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};

Dll.cpp стандартный, как у ЕХЕ.
В опциях проекта Dll добавлено в С++-> Preprocessor ->Preprocessor Definition _AFXEXT
ВСЕ!
В ЕХЕ просто продублирован класс, как в длл, и также настроен препроцессор.
Просто класс я ля копи-пасте..
Так что же делать? Кто прав? Как правильно?
Вообще у меня не работало, из-за неправильного описания препроцессора.
Но кто из вас прав?
Хотя похожи методы, но вроде попроще у bel_nikita smile
Добавлено @ 18:26
Цитата(bel_nikita @ 7.11.2005, 16:07)
Еще раз попробывал. У меня ничего не блокируется. Могу бырать Automation и Win Sockets. Проект MFC Extension DLL.
Все это пробывалось на MSVC6 SP6.

Дружище, давно пора переходить на новые компиляторы..
В семерке запрещает..



--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Coocky
Дата 8.11.2005, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Вопросы в догонку...
Можно ли установить неявно подключаемую длл не каталоге исполняемого модуля. Если да , то как( а то длл много, хочу по папкам раскидать..)
То что lib прописывается -это одно, а вот длл -то ищется в каталоге exe...
Добавлено @ 18:53
Как правильно пользоваться
AfxGetResourceHandle();
AfxSetResourceHandle();
для использования ресурсов длл, а не проекта..



--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Earnest
Дата 8.11.2005, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Coocky
У нас почти одно и то же. Я просто тебе в чем суть попыталась объяснить. smile

1) Посмотри что такое AFX_EXT_CLASS - это ровно __declspec(dllexport) или __declspec(dllimport), в зависимости от наличия _AFXEXT.

2) Дублировать объявления классов нехорошо! А поддержка?!!! Это же застрелиться можно - в нескольких местах синхронно править!! smile
Лучше использовать один и тот же хедер. Символ типа AFX_EXT_CLASS для того и нужен, чтобы по разному интерпретироваться в зависимости от модуля, в котором это компилируется.

3)
Цитата(Coocky @ 8.11.2005, 18:25)
В опциях проекта Dll добавлено в С++-> Preprocessor ->Preprocessor Definition _AFXEXT
ВСЕ!

Все - это если у тебя нет зависимости между разными extension DLL. А если есть - простой метод не пройдет - нужны разные символы, для каждой DLL свой.
А так - суть та же.




--------------------
...
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1257 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.