powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / DLL
24 сообщений из 24, страница 1 из 1
DLL
    #33014507
Cергей1111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуте.

Извините за простой вопрос:
Как руками (без MFC!) создать и использовать DLL?

Заранее спасибо.
...
Рейтинг: 0 / 0
DLL
    #33014772
CruelGenius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cергей1111Здравствуте.

Извините за простой вопрос:
Как руками (без MFC!) создать и использовать DLL?

Заранее спасибо.

Создать просто во-первых указать компилятору что будешь делать длл,
во вторых оформить функцию входа для длл,
а загружаешь через LoadLibrary
...
Рейтинг: 0 / 0
DLL
    #33014951
Ste@lth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вышесказанное верно...

далее в дллке должна быть функция
Код: plaintext
1.
2.
3.
BOOL APIENTRY DllMain(HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
	return TRUE;
}
это точка входа, вызывается при вызове функций LoadLibrary и FreeLibrary

далее описываешь свои функции для экспорта
если использовать С стиль, то:

Код: plaintext
__declspec(dllexport) bool init(char*);

а в программе, которая ее открывает пишешь следующее:

Код: plaintext
1.
2.
3.
typedef bool (__cdecl *DLL_init)(char*);                      //описываем импортируемую функцию
HINSTANCE hinst=LoadLibrary("my.dll");                        //загружаем библиотеку
DLL_init init=(DLL_init)GetProcAddress(hinst,"init");         //получаем адрес нашей функции
init("string");                                                           //вызываем ее


а вот у меня другой вопрос есть: при загрузке через LoadLibrary дллка блокируется, а как сделать так, чтобы после ее загрузки ее можно было например удалить???
...
Рейтинг: 0 / 0
DLL
    #33015369
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Ste@lth:
Никак, любой загруженный EXE или DLL файл (что в принципе одно и тоже), блокируется системой, так как она использует зачастую прямое отображение их в память с диска, похоже на файл подкачки, делается, чтобы не тратить место в основном страничном файле. Поэтому пока образ загружен, система должна всегда гарантированно иметь к нему доступ, что она и делает.
Удалить можно после FreeLibrary, но только если библиотеку освободят все использующие ее процессы.
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
DLL
    #33015394
CruelGenius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Ste@lth
Меня терзают смутные сомнения ... (С) Иван Васильевич меняет профессию

Слушай а зачем такое может понадобится?
Удалять после загрузки DLL&
Я наоборот стараюсь часто все что можно засунуть в exe файл
...
Рейтинг: 0 / 0
DLL
    #33015415
Ste@lth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне пришел в голову один вариант, но вот не знаю прокатит ли он:

1. LoadLibrary - загружаю
2. GetProcAddress - нахожу адреса всех функций
3. FreeLibrary - выгружаю
4. загружаю длл-ку в память как обычный файл
5. вычисляю адреса к функциям и работаем-с....

оцените идею:)
...
Рейтинг: 0 / 0
DLL
    #33015437
Ste@lth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
суть задачи в следующем:

есть программка, которая в ходе работы грузит длл-ки, есть необходимость эти длл-ки менять, но вот перезапускать программу крайне не желательно...
отсюда и появилась идея менять их online, но для этого необходима возможность удалить старую и поставить новую....

далее в программе на таймере висит проверяльщик версий длл-ок, и по мере изменения он обновляет необходимые...
...
Рейтинг: 0 / 0
DLL
    #33015463
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моему 2k и выше NTFS можно удалить или заменить.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
DLL
    #33015489
Ste@lth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WinXP и Win2003, естественно NTFS, но низя...
имхо это глупо, зависимость от ОС и тем более от файловой системы
...
Рейтинг: 0 / 0
DLL
    #33015873
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123По моему 2k и выше NTFS можно удалить или заменить.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!

Все равно низзя)))
...
Рейтинг: 0 / 0
DLL
    #33015886
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ste@lthмне пришел в голову один вариант, но вот не знаю прокатит ли он:

1. LoadLibrary - загружаю
2. GetProcAddress - нахожу адреса всех функций
3. FreeLibrary - выгружаю
4. загружаю длл-ку в память как обычный файл
5. вычисляю адреса к функциям и работаем-с....

оцените идею:)

1) GetProcAddress дает не относительное смещение в загруженной библиотеке (этого смещения вообще быть не может, так как любой исполняемый образ загружается посекционно), а абсолютный указатель в адресном пространстве вашего процесса куда была отображена DLL
2) Если загрузить DLL файл, то работать не будет:
а) Нельзя передать исполнения на адресс в странице данных
б) работать не будет, т.к. DLL надо инициализировать ядром, это не просто кусок кода
в) адреса функции вы все равно не знаете
...
Рейтинг: 0 / 0
DLL
    #33015925
Ste@lth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. знаю
2а. PAGE_EXECUTE_READWRITE - Enables execute, read, and write access to the committed region of pages.
2б. вот наверно из-за этого и не получилось:(
2в. уже вычислил

ну и как быть? не уж то такая задача не имеет решения?
...
Рейтинг: 0 / 0
DLL
    #33015963
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не пойму я - после FreeLib можно менять dll. Что тогда надо?
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
DLL
    #33016000
Ste@lth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DLL-ка должна постоянно работать, и только по необходимости перегружаться...
программа - это некий сервис не имеющий пользовательского интерфейса, т.е. низя вставить кнопочку останова длл-ки...
можно конечно дописать интерфейс для остановки, НО!

обходных путей много, но вопрос изначально в том, как грузить длл-ку, не блокируя при этом файл?
...
Рейтинг: 0 / 0
DLL
    #33016034
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а может товарищ хочет написать свой сервер приложений? Эдакую среду в которой DLL-ки выполняться будут, используя пул соединений к БД?...))
...
Рейтинг: 0 / 0
DLL
    #33016036
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ste@lthDLL-ка должна постоянно работать, и только по необходимости перегружаться...
программа - это некий сервис не имеющий пользовательского интерфейса, т.е. низя вставить кнопочку останова длл-ки...
можно конечно дописать интерфейс для остановки, НО!

обходных путей много, но вопрос изначально в том, как грузить длл-ку, не блокируя при этом файл?

а скопировать во временный файл?
...
Рейтинг: 0 / 0
DLL
    #33016083
CruelGenius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда по моему вообще написать свою библиотеку которая будет храниться в двоичном файле на диске загружаться по мере необходимости, и задача точек вход к функциям,а равно к переменным глобальным будет лежать на программисте. А длл тут мало поможет.
...
Рейтинг: 0 / 0
DLL
    #33016148
Ste@lth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем, как я понимаю, простых решений нету....

ладно, будем использовать сложные :(
всем спасибо за внимание!
...
Рейтинг: 0 / 0
DLL
    #33016326
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Она должна перегружаться!
Сама? Кто её перегружает/загружает тот и должен ей оперировать.
Странный ты. В exe нет кнопки, а по какому событию dll подключается?
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
DLL
    #33016724
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нужно делать по другому,
создается папка куда будут сгружатся новые версии
по таймеру проверяется если появилась новая версия,
если есть, сервер выгружает рабочию длл,
после этого move из папки для обновлений для длл в рабочию,
ну и загрузка длл по новому,
конечно можно сперва посмотреть если новая длл подходит,
если чтото не то не менять версию длл.
...
Рейтинг: 0 / 0
DLL
    #33016746
Ste@lth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 zuzu:
фух....
именно так я уже и сделал:)
...
Рейтинг: 0 / 0
DLL
    #33017586
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ste@lth
а вот у меня другой вопрос есть: при загрузке через LoadLibrary дллка блокируется, а как сделать так, чтобы после ее загрузки ее можно было например удалить???


Чтобы после загрузки DLL ее можно было удалить, нужно выгрузить эту DLL.
...
Рейтинг: 0 / 0
DLL
    #33017587
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ste@lth
1. LoadLibrary - загружаю
2. GetProcAddress - нахожу адреса всех функций
3. FreeLibrary - выгружаю
4. загружаю длл-ку в память как обычный файл
5. вычисляю адреса к функциям и работаем-с....

оцените идею:)


Полный бред.
...
Рейтинг: 0 / 0
DLL
    #33017595
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ste@lthв общем, как я понимаю, простых решений нету....

Есть. Выгрузить DLL, взять новую и загрузить. При этом данные этой DLL ты должен будешь как-то специальным образом организовывать, чтобы ее можно было бы копировать в другое место (или изначально хранить в другом месте).
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / DLL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]