|
|
|
DLL
|
|||
|---|---|---|---|
|
#18+
Здравствуте. Извините за простой вопрос: Как руками (без MFC!) создать и использовать DLL? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2005, 21:01 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
Cергей1111Здравствуте. Извините за простой вопрос: Как руками (без MFC!) создать и использовать DLL? Заранее спасибо. Создать просто во-первых указать компилятору что будешь делать длл, во вторых оформить функцию входа для длл, а загружаешь через LoadLibrary ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 07:36 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
вышесказанное верно... далее в дллке должна быть функция Код: plaintext 1. 2. 3. далее описываешь свои функции для экспорта если использовать С стиль, то: Код: plaintext а в программе, которая ее открывает пишешь следующее: Код: plaintext 1. 2. 3. а вот у меня другой вопрос есть: при загрузке через LoadLibrary дллка блокируется, а как сделать так, чтобы после ее загрузки ее можно было например удалить??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 09:45 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
2 Ste@lth: Никак, любой загруженный EXE или DLL файл (что в принципе одно и тоже), блокируется системой, так как она использует зачастую прямое отображение их в память с диска, похоже на файл подкачки, делается, чтобы не тратить место в основном страничном файле. Поэтому пока образ загружен, система должна всегда гарантированно иметь к нему доступ, что она и делает. Удалить можно после FreeLibrary, но только если библиотеку освободят все использующие ее процессы. ________________________________________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 11:47 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
2 Ste@lth Меня терзают смутные сомнения ... (С) Иван Васильевич меняет профессию Слушай а зачем такое может понадобится? Удалять после загрузки DLL& Я наоборот стараюсь часто все что можно засунуть в exe файл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 11:53 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
мне пришел в голову один вариант, но вот не знаю прокатит ли он: 1. LoadLibrary - загружаю 2. GetProcAddress - нахожу адреса всех функций 3. FreeLibrary - выгружаю 4. загружаю длл-ку в память как обычный файл 5. вычисляю адреса к функциям и работаем-с.... оцените идею:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 11:58 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
суть задачи в следующем: есть программка, которая в ходе работы грузит длл-ки, есть необходимость эти длл-ки менять, но вот перезапускать программу крайне не желательно... отсюда и появилась идея менять их online, но для этого необходима возможность удалить старую и поставить новую.... далее в программе на таймере висит проверяльщик версий длл-ок, и по мере изменения он обновляет необходимые... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 12:04 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
По моему 2k и выше NTFS можно удалить или заменить. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 12:10 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
WinXP и Win2003, естественно NTFS, но низя... имхо это глупо, зависимость от ОС и тем более от файловой системы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 12:17 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
Petro123По моему 2k и выше NTFS можно удалить или заменить. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! Все равно низзя))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 13:50 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
Ste@lthмне пришел в голову один вариант, но вот не знаю прокатит ли он: 1. LoadLibrary - загружаю 2. GetProcAddress - нахожу адреса всех функций 3. FreeLibrary - выгружаю 4. загружаю длл-ку в память как обычный файл 5. вычисляю адреса к функциям и работаем-с.... оцените идею:) 1) GetProcAddress дает не относительное смещение в загруженной библиотеке (этого смещения вообще быть не может, так как любой исполняемый образ загружается посекционно), а абсолютный указатель в адресном пространстве вашего процесса куда была отображена DLL 2) Если загрузить DLL файл, то работать не будет: а) Нельзя передать исполнения на адресс в странице данных б) работать не будет, т.к. DLL надо инициализировать ядром, это не просто кусок кода в) адреса функции вы все равно не знаете ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 13:54 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
1. знаю 2а. PAGE_EXECUTE_READWRITE - Enables execute, read, and write access to the committed region of pages. 2б. вот наверно из-за этого и не получилось:( 2в. уже вычислил ну и как быть? не уж то такая задача не имеет решения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 14:04 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
Не пойму я - после FreeLib можно менять dll. Что тогда надо? ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 14:16 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
DLL-ка должна постоянно работать, и только по необходимости перегружаться... программа - это некий сервис не имеющий пользовательского интерфейса, т.е. низя вставить кнопочку останова длл-ки... можно конечно дописать интерфейс для остановки, НО! обходных путей много, но вопрос изначально в том, как грузить длл-ку, не блокируя при этом файл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 14:26 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
а может товарищ хочет написать свой сервер приложений? Эдакую среду в которой DLL-ки выполняться будут, используя пул соединений к БД?...)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 14:32 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
Ste@lthDLL-ка должна постоянно работать, и только по необходимости перегружаться... программа - это некий сервис не имеющий пользовательского интерфейса, т.е. низя вставить кнопочку останова длл-ки... можно конечно дописать интерфейс для остановки, НО! обходных путей много, но вопрос изначально в том, как грузить длл-ку, не блокируя при этом файл? а скопировать во временный файл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 14:33 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
Тогда по моему вообще написать свою библиотеку которая будет храниться в двоичном файле на диске загружаться по мере необходимости, и задача точек вход к функциям,а равно к переменным глобальным будет лежать на программисте. А длл тут мало поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 14:48 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
в общем, как я понимаю, простых решений нету.... ладно, будем использовать сложные :( всем спасибо за внимание! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 15:03 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
Она должна перегружаться! Сама? Кто её перегружает/загружает тот и должен ей оперировать. Странный ты. В exe нет кнопки, а по какому событию dll подключается? ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 15:50 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
нужно делать по другому, создается папка куда будут сгружатся новые версии по таймеру проверяется если появилась новая версия, если есть, сервер выгружает рабочию длл, после этого move из папки для обновлений для длл в рабочию, ну и загрузка длл по новому, конечно можно сперва посмотреть если новая длл подходит, если чтото не то не менять версию длл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 17:25 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
2 zuzu: фух.... именно так я уже и сделал:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 17:33 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
Ste@lth а вот у меня другой вопрос есть: при загрузке через LoadLibrary дллка блокируется, а как сделать так, чтобы после ее загрузки ее можно было например удалить??? Чтобы после загрузки DLL ее можно было удалить, нужно выгрузить эту DLL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 10:58 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
Ste@lth 1. LoadLibrary - загружаю 2. GetProcAddress - нахожу адреса всех функций 3. FreeLibrary - выгружаю 4. загружаю длл-ку в память как обычный файл 5. вычисляю адреса к функциям и работаем-с.... оцените идею:) Полный бред. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 10:59 |
|
||
|
DLL
|
|||
|---|---|---|---|
|
#18+
Ste@lthв общем, как я понимаю, простых решений нету.... Есть. Выгрузить DLL, взять новую и загрузить. При этом данные этой DLL ты должен будешь как-то специальным образом организовывать, чтобы ее можно было бы копировать в другое место (или изначально хранить в другом месте). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 11:01 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=409&tid=2033458]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 367ms |

| 0 / 0 |
