![]() |
|
![]() ![]() ![]() |
|
Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Стоп,стоп стоп.. Дык при выбре MFC extension dll блокируется галочка Automation ![]() Ты какой тип проекта создавал? ![]() -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья ![]() |
|||
|
||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 2 Всего: 47 |
MFC extension создавал ![]() |
|||
|
||||
Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Ну раз ТОЧНО, тогда я спокоен.. ![]() -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья ![]() |
|||
|
||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 2 Всего: 47 |
Coocky
Еще раз попробывал. У меня ничего не блокируется. Могу бырать Automation и Win Sockets. Проект MFC Extension DLL. Все это пробывалось на MSVC6 SP6. |
|||
|
||||
Earnest |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Coocky
1) Dependencies - это команда Project->Dependencies, и там галки ставишь, что от чего зависит. 2) 20 и более проектов среда тянет легко. 3) Чтобы что-то экспортировать, нужно в объявлении функции или класса в источнике (DLL) написать __declspec(dllexport), а в клиенте (EXE) - __declspec(dllimport). Так как обычно объявления пишут в хедерах, и не хочется их дублировать для DLL и EXE, обычно делают что-то вроде (см. MFC):
При этом символ _AFXEXT у тебя определен в DLL (т.е. там ты имеешь экспорт). А в EXE - cоответственно, импорт. Только для этого символ _AFXEXT и нужен. НО: если есть некая общая DLL, функциями/классами которой пользуются другие (т.е. есть зависимость между библиотеками), такой фокус не пройдет. У обеих библиотек символ _AFXEXT определен - получается, все экспортируется - и свое, и чужое. Тогда для каждой DLL нужно завести свой символ, и написать подобные объявления. Скажем, есть DLL MegaSuperDLL. Для нее определяем символ _MEGASUPER (в параметрах препроцессора). Далее, создаем хедер MegaSuper.h:
Далее, пишем класс, который будет экспортироваться:
В этом случае экспортируются все функции класса, а если надо экспортировать выборочно, то MEGASUPER_API пишем не у класса, а у определений этих функций. Вот и все. -------------------- ... |
||||||
|
|||||||
Coocky |
|
||||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Earnest
Совсем запутали... Смотри, что у bel_nikita Файл Dll.h (библиотеки)
Dll.cpp стандартный, как у ЕХЕ. В опциях проекта Dll добавлено в С++-> Preprocessor ->Preprocessor Definition _AFXEXT ВСЕ! В ЕХЕ просто продублирован класс, как в длл, и также настроен препроцессор. Просто класс я ля копи-пасте.. Так что же делать? Кто прав? Как правильно? Вообще у меня не работало, из-за неправильного описания препроцессора. Но кто из вас прав? Хотя похожи методы, но вроде попроще у bel_nikita ![]() Добавлено @ 18:26
Дружище, давно пора переходить на новые компиляторы.. В семерке запрещает.. -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья ![]() |
||||
|
|||||
Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Вопросы в догонку...
Можно ли установить неявно подключаемую длл не каталоге исполняемого модуля. Если да , то как( а то длл много, хочу по папкам раскидать..) То что lib прописывается -это одно, а вот длл -то ищется в каталоге exe... Добавлено @ 18:53 Как правильно пользоваться AfxGetResourceHandle(); AfxSetResourceHandle(); для использования ресурсов длл, а не проекта.. -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья ![]() |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Coocky
У нас почти одно и то же. Я просто тебе в чем суть попыталась объяснить. ![]() 1) Посмотри что такое AFX_EXT_CLASS - это ровно __declspec(dllexport) или __declspec(dllimport), в зависимости от наличия _AFXEXT. 2) Дублировать объявления классов нехорошо! А поддержка?!!! Это же застрелиться можно - в нескольких местах синхронно править!! ![]() Лучше использовать один и тот же хедер. Символ типа AFX_EXT_CLASS для того и нужен, чтобы по разному интерпретироваться в зависимости от модуля, в котором это компилируется. 3)
Все - это если у тебя нет зависимости между разными extension DLL. А если есть - простой метод не пройдет - нужны разные символы, для каждой DLL свой. А так - суть та же. -------------------- ... |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |