Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2011, 01:32   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию VC++. DLL. Где создавать глобальные переменные?

Уже кучу времени пытаюсь разобраться в этой иерархии =\

Изначально были:
dllmain.cpp - там описана точка входа в ДЛЛ
stdafx.h - странный файл, который надо прописывать в начале каждого хидера
stdafx.cpp
HookDLL.cpp - туда сказано кидать функции для экспорта

Я добавил:
HookDLL.h - хидер для cpp - чтобы из основной проги вызывать
Дальше пытался создать две глобальные переменные... Куда я их только не писал... То говорит, что два раза объявил, то ошибку. Думал, думал... Понял, что логично будет создать cpp и h для обычных функций (не для экспорта):
DLLprocs.h - глобальные переменные + прототипы
DLLprocs.cpp - описание функций

Теперь куда-то надо было хидер впихнуть... Внизу stdafx.h нашёл строчку, что все хидеры следует добавлять сюда. Добавил... При компиляции получил, что мол моя первая глобальная переменная уже объявлена в stdafx.obj. В отчаянии написал на форум :D
TwiX вне форума Ответить с цитированием
Старый 20.06.2011, 06:16   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Мне в миллионный раз расписывать какпроисходит компиляция в С++, что по сути есть хидеры, как они включаются и почему не стоит описывать глобальные переменные в хидерах (можно прописать "прототип" переменной extern int a, а реализацию int a можно писать только в сипипишках)?
ЗЫ. stdafx.h - это предкомпиленный хедер. Ничего гениального не делает, добавляются туда наиболее часто используемые хедеры и впоследствии это в больших проектах существенно уменьшает время компиляции (за счет того, что не обрабатывается один и тот же набор хедеров для каждого сипипи файла, а происходит это всего один раз)
pu4koff вне форума Ответить с цитированием
Старый 20.06.2011, 06:58   #3
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Цитата:
Мне в миллионный раз расписывать какпроисходит компиляция в С++
Где можно почитать? Вроде как всё склеивается в один файл (там где были инклюды). Из cpp делаются объектные файлы, а потом уже всё склеивается в прогу?

Если так, то понятно, почему не надо в хедерах объявлять

Я сделал так: удалил HookDLL.cpp (который между прочим был ещё в начале!), DLLprocs, а все функции из них пихнул в DLLmain.cpp. Кривовато наверно, но работает)
TwiX вне форума Ответить с цитированием
Старый 20.06.2011, 07:58   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от TwiX Посмотреть сообщение
Где можно почитать?
Я уже не помню в каких темах про это писал, а книги/статьи с этой информацией я не видел.
Цитата:
Сообщение от TwiX Посмотреть сообщение
Вроде как всё склеивается в один файл (там где были инклюды). Из cpp делаются объектные файлы, а потом уже всё склеивается в прогу?
Ну типа того. Итог - для каждого cpp, использующего этот хедер, будет свой экземпляр переменной.
Цитата:
Сообщение от TwiX Посмотреть сообщение
Я сделал так: удалил HookDLL.cpp (который между прочим был ещё в начале!), DLLprocs, а все функции из них пихнул в DLLmain.cpp. Кривовато наверно, но работает)
В плюсах нет никакой спецификации по структуре проекта (по каким файлам что и куда класть). Ну а эти файлы были созданы визардом, я так понимаю. Создатель визарда решил, что так будет кошернее, но на вкус и цвет фломастеры разные. Главное - хедер(-ы) с описанием всего экспортируемого оставьте, а то как потом DLL использовать будете.
Чаще всего, вообще создают 3 папки:
1) include - папка с хедерами, которые потом потребуются для использования DLL в программах, т.е. прототипы всего экспортируемого находятся там.
2) src (source) - это собственно все кишки библиотеки
3) lib - сюда складывается lib файл(ы), которые потребуются для статического подключения DLL.
Разработчикам сторонних продуктов потом отдаются папки include и lib. Ну и сама DLL соответственно. Ну а src - это святое и никому не показывается (если библиотека конечно не опенсорсная).

Это более или менее устоявшийся обычай при создании DLL (вовсе не обязательно так делать, но так удобненько и привычненько будет для пользователей библиотеки). Остальное деление по h/cpp выбирается разработчиком по желанию.
pu4koff вне форума Ответить с цитированием
Старый 20.06.2011, 18:48   #5
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Спасибо, разобрался. Плюс почему-то форум не разрешает поставить
TwiX вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Глобальные переменные tae1980 Microsoft Office Excel 16 20.11.2013 08:41
глобальные переменные ZuBy Общие вопросы Delphi 3 11.09.2010 14:17
глобальные переменные Dimarik PHP 2 11.07.2010 19:22
Глобальные переменные Lokos Общие вопросы Delphi 3 05.05.2010 11:15
Глобальные переменные werser Помощь студентам 5 23.03.2010 18:08