Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> h-файлы 
:(
    Опции темы
NiJazz
  Дата 3.10.2003, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


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

Репутация: 1
Всего: 23



Привет!
У меня возник вопрос, став актуальным. smile.gif Если я пишу модуль, потом хочу сделать для него h-файл, хочу, чтобы этот h могли потом использовать другие, описываю там все типы, что использовал, пишу прототипы всех функций. После этого мне обязательно держать *.h и *.cpp в одной папке?
Ведь в средах разработки есть куча своих h-файлов и все они лежат в папках типа Include. А где содержится реализация этих функций, прототипы которых они содержат? К примеру, stdio.h. Вообще, какова семантика такого описания? Откуда потом программа, где я делал #include <stdio.h>, знает, как работает printf()confused.gif ведь в stdio.h есть только описание прототипов, но не самих функций.
PM MAIL   Вверх
NiJazz
Дата 3.10.2003, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


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

Репутация: 1
Всего: 23



Народ, или хотя бы ссылочку дайте на хорошую инфу, если есть. smile.gif
PM MAIL   Вверх
Ars
Дата 3.10.2003, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 28.8.2003
Где: Московская обл.

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



Цитата
Ведь в средах разработки есть куча своих h-файлов и все они лежат в папках типа Include. А где содержится реализация этих функций, прототипы которых они содержат?

в папках типа Lib smile.gif


--------------------
Есть многое на свете, друг Горацио,
С чем очень долго можно прое..!
PM MAIL   Вверх
RAN
Дата 3.10.2003, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Слышал о файлах .lib?
Это откомпилированные модули, в них реализация всех функции из .h. Есть несколько lib-ов, которые компилятор подключает сам. Их список можно посмотреть в VC в Project->Setting..., закладка Link в категории General в строке Object/Library Modules. ("kernel32.lib user32.lib gdi32.lib ...") Но туда лучше писать только стандартные библиотеки (просто так принято).

В том же Link есть в категории Input строка Additional Library Path. Туда можно прописать путь к твоим lib и дописать их стандартным.

Короче, тебе надо создать такой lib файл. И программисты будут включать его в проект. Или оставь cpp. Так они смогут править его.
PM MAIL ICQ   Вверх
NiJazz
Дата 3.10.2003, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


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

Репутация: 1
Всего: 23



RAN, конечно слышал. smile.gif
Только я не пойму вот чего... Есть ведь ещё динамические библиотеки, они же DLL. Вот когда я создаю DLL, мне можно к ней h-файл делать?
Как вообще взаимосвязаны h, lib и dll (не все друг с другом, конечно)?
PM MAIL   Вверх
Ars
Дата 3.10.2003, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 28.8.2003
Где: Московская обл.

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



Цитата
Как вообще взаимосвязаны h, lib и dll

в h описаны правила вызова функций, в lib содержится реализация функции в объектном коде
если есть еще и относящаяся к ним dll, то lib содержит код загрузки dll и получения из нее адресов функций при запуске приложения


--------------------
Есть многое на свете, друг Горацио,
С чем очень долго можно прое..!
PM MAIL   Вверх
RAN
Дата 3.10.2003, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Всё верно. dll - динамическая библиотека, а lib - статическая. Динамическая подключается LoadLibrary, которую вызываешь ты или CRT, а статическая компануется к твоей проге "намертво". Обычно создавая dll, создают к ней ещё и lib. Для этого существуют специальные программы (в пакете VC это утилита lib.exe). Эти программы создают на основе dll статическую библиотеку lib. Которая будет загружать при загрузке твоей программы dll-библиотеку и получит адреса всех необходимых функций. При таком подходе твоя программа без этой dll работать не будет.

Так что ситуация такая: В h описывают функции. В dll или lib их реализуют. Причём lib компануется к твоей программе, увеличивая её размер. И каждая программа использующая такие функции будет иметь свой экземпляр библиотеке. А dll необходимо загружать в память динамически. Причём сколько бы программ не использовало эту dll, лишь один экземпляр библиотеки будет загружен в память. В результате твоя программа короче. Но можно создать lib для dll, скомпоновать её с программой и работать с dll как со статической.

Вот
PM MAIL ICQ   Вверх
NiJazz
Дата 3.10.2003, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


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

Репутация: 1
Всего: 23



RAN, самая загвоздка и заключалась в том, как использовать то, что вложено в dll. Было предчувствие, что для этого как-то lib и используют, но этого сало. smile.gif Спасибо.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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