Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Файл с расширением- dll?


Автор: mister2010 29.5.2010, 16:39
Объясните русским языком ,что такое файл длл?
Почему при написании самого  длл на WINAPI, нужно прописать такое в проекте.
plugin.hpp - это что за файл и зачем он нужен?
И ещё нужно создавать файл с расширением .def, почему?

Автор: Dem_max 29.5.2010, 17:24
Цитата

Объясните русским языком ,что такое файл длл?

Это подключаемый модуль содержащий функции (исполняемый код), ресурсы (картинки, музыка и др.)

Цитата

Почему при написании самого  длл на WINAPI, нужно прописать такое в проекте.
plugin.hpp - это что за файл и зачем он нужен?

Нет, ничего такого не нужно прописывать, просто нужно создать новый проект и выбрать "Динамическая библиотека"

Цитата

И ещё нужно создавать файл с расширением .def, почему?

не обязательно, .def файл нужен если только необходимо переопределить экспортируемое имя функции из DLL, так как все компиляторы создают различное имя экспортируемой функции.
Правильные имена функций создают компиляторы от Борланда, компиляторы от майкрософта неправильные, поэтому там используется .def для переопределения имени функции.

Автор: mister2010 29.5.2010, 17:41
Вот встретил такой код в файле деф, расшифруйте его пожалуйста, что означает этот код в файле с расширением деф.
Код

LIBRARY
EXPORTS
GetPluginInfoW=_GetPluginInfo@4
OpenPluginW=_OpenPlugin@8
SetStartupInfoW=_SetStartupInfo@4

Код

Это подключаемый модуль содержащий функции (исполняемый код), ресурсы (картинки, музыка и др.)

Подключаемый модуль куда в plugin.hpp или в Far.exe?


Правильно ли я понимаю, когда я кидаю в папку портат.программу.Фар где лежит файл Far.exe, кидаю файл длл, при запуске программы Far.exe, файл far.exe вызывает файл plugin.hpp, а plugin.hpp  вызывает файл моего длл, например slava.dll ?

Автор: GoldFinch 29.5.2010, 17:44
mister2010, вам еще рано заниматься программированием. 
Сначала изучите ОС которой пользуетесь.

Автор: Dem_max 29.5.2010, 17:52
Цитата

LIBRARY
EXPORTS
GetPluginInfoW=_GetPluginInfo@4
OpenPluginW=_OpenPlugin@8
SetStartupInfoW=_SetStartupInfo@4


LIBRARY - говорит что это у нас DLL, экспортировать функции может и EXE
EXPORTS говорит что мы экспортируем функции
GetPluginInfoW=_GetPluginInfo@4 - переопределение имени функций 
компилятор от MS генерит имена как GetPluginInfo@4, но в итоге нужно получить правильное имя ввиде GetPluginInfo, или можно вообще поменять имя на  GetPluginInfoW.

Автор: mister2010 29.5.2010, 18:04
1)Что означает первый знак подчёркивания в этом _GetPluginInfo@4 И что означает @4
А во второй строке OpenPluginW=_OpenPlugin@8        @8?

Вы говорили что можно так написать GetPluginInfoW=_GetPluginInfoW
Так не работает.

2)Файл експорта нужен для переопределения функций описанных в файле plugin.hpp?



Автор: Леопольд 29.5.2010, 19:11
mister2010
Цитата(GoldFinch @  29.5.2010,  17:44 Найти цитируемый пост)
Сначала изучите ОС которой пользуетесь. 


Автор: mister2010 29.5.2010, 19:16
Ответьте пожалуйста на вопрос последний.

Автор: GoldFinch 29.5.2010, 19:25
mister2010
исполняемые файлы программы, в том числе и длл строятся из .cpp файлов.
.hpp и .h файлы - это части .cpp
компилятор их не различает, и не может определить какие функции длл экспортируются, в .hpp они или нет.
по этому при сборке длл надо предоставлять отдельный список экспортируемых функций, в .def файле
(либо надо помечать функции __declspec(dllexport) в коде)

Добавлено через 4 минуты и 14 секунд
в записи "_OpenPlugin@8"
_  - указывает соглашение вызова, stdcall
@8  - число параметров умноженное на 4

вообще-то можно не писать
имя = _имя@N
а писать в .def файл только имена экспортируемых функций

Автор: mister2010 29.5.2010, 22:20
Каким образом 10 програм запущенных на компе могут пользоватся одним длл

Автор: djamshud 29.5.2010, 22:33
RTFM!

http://en.wikipedia.org/wiki/Dynamic_linking
http://en.wikipedia.org/wiki/Dynamic-link_library

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)