|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.06.2011, 01:32 | #1 |
Участник клуба
Регистрация: 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 |
20.06.2011, 06:16 | #2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Мне в миллионный раз расписывать какпроисходит компиляция в С++, что по сути есть хидеры, как они включаются и почему не стоит описывать глобальные переменные в хидерах (можно прописать "прототип" переменной extern int a, а реализацию int a можно писать только в сипипишках)?
ЗЫ. stdafx.h - это предкомпиленный хедер. Ничего гениального не делает, добавляются туда наиболее часто используемые хедеры и впоследствии это в больших проектах существенно уменьшает время компиляции (за счет того, что не обрабатывается один и тот же набор хедеров для каждого сипипи файла, а происходит это всего один раз) |
20.06.2011, 06:58 | #3 | |
Участник клуба
Регистрация: 28.07.2009
Сообщений: 1,510
|
Цитата:
Если так, то понятно, почему не надо в хедерах объявлять Я сделал так: удалил HookDLL.cpp (который между прочим был ещё в начале!), DLLprocs, а все функции из них пихнул в DLLmain.cpp. Кривовато наверно, но работает) |
|
20.06.2011, 07:58 | #4 | ||
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Я уже не помню в каких темах про это писал, а книги/статьи с этой информацией я не видел.
Цитата:
Цитата:
Чаще всего, вообще создают 3 папки: 1) include - папка с хедерами, которые потом потребуются для использования DLL в программах, т.е. прототипы всего экспортируемого находятся там. 2) src (source) - это собственно все кишки библиотеки 3) lib - сюда складывается lib файл(ы), которые потребуются для статического подключения DLL. Разработчикам сторонних продуктов потом отдаются папки include и lib. Ну и сама DLL соответственно. Ну а src - это святое и никому не показывается (если библиотека конечно не опенсорсная). Это более или менее устоявшийся обычай при создании DLL (вовсе не обязательно так делать, но так удобненько и привычненько будет для пользователей библиотеки). Остальное деление по h/cpp выбирается разработчиком по желанию. |
||
20.06.2011, 18:48 | #5 |
Участник клуба
Регистрация: 28.07.2009
Сообщений: 1,510
|
Спасибо, разобрался. Плюс почему-то форум не разрешает поставить
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Глобальные переменные | 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 |