Вверх ↑
Этот топик читают: Гость
Ответов: 127
Рейтинг: 0
#1: 2009-04-20 23:26:39 ЛС | профиль | цитата
Здравствуйте!
Тут появилась необходимость выгружать DLL, т.к. они у меня большие и соответственно много памяти едят..
Чего-то не нашел как это можно сделать хотя бы через cmd.
Так вот, тут код, который нужен. Как его синтегрировать с хиасм?
Я не знаток, но нужно его вставить в инлайнкод, наверно.

Код:

code_12914.txt

Думаю для кого-то это не проблема...
Спасибо.
карма: 0

0
файлы: 1code_12914.txt [466B] [165]
Разработчик
Ответов: 26322
Рейтинг: 2147
#2: 2009-04-20 23:58:16 ЛС | профиль | цитата
Вот, попробуй


Add(MainForm,2953706,168,112)
{
Width=364
Height=98
}
Add(InlineCode,15752035,224,168)
{
WorkPoints=#9:doKillDll|
EventPoints=#8:onResult|
DataPoints=#7:NameDll|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|23: onResult: THI_Event;|22: NameDll: THI_Event;|54: procedure doKillDll(var _Data: TData; Index: Word);|5: end;|0:|14:implementation|0:|32:procedure THiAsmClass.doKillDll;|3:var|16: hDLL: THandle;|30: aName: array[0..64] of char;|20: FoundDLL: Boolean;|19: aDllName: string;|5:begin|41: aDllName := ReadString(_Data, NameDll);|28: StrPCopy(aName, aDllName);|20: FoundDLL := False;|8: repeat|35: hDLL := GetModuleHandle(aName);|20: if hDLL = 0 then|10: Break;|21: FoundDLL := True;|22: FreeLibrary(hDLL);|14: until False;|18: if FoundDLL then|36: _hi_OnEvent(onResult,'Success!')|6: else|44: _hi_OnEvent(onResult, 'DLL not found!');|4:end;|0:|0:|0:|4:end.|
link(onResult,2483317:doMessage,[])
link(NameDll,10145365:Text,[])
}
Add(Button,8729593,168,168)
{
Left=145
Top=35
TabOrder=-1
Caption="Kill"
link(onClick,15752035:doKillDll,[])
}
Add(Edit,10145365,224,112)
{
Left=110
Top=10
Width=130
Text="My.dll"
}
Add(Message,2483317,280,168)
{
}

карма: 22

0
Ответов: 127
Рейтинг: 0
#3: 2009-04-21 00:03:40 ЛС | профиль | цитата
Оперативно, однако...
Спасибо, nesco, буду пробовать...
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#4: 2009-04-21 00:11:15 ЛС | профиль | цитата
чудовищный код вообще-то... можно узнать кто это советует делать такое?
карма: 26
0
Разработчик
Ответов: 26322
Рейтинг: 2147
#5: 2009-04-21 00:20:05 ЛС | профиль | цитата
Dilma писал(а):
чудовищный код вообще-то...

Я, как-то, и не вдавался в подробности. Перегнал, просто, и все
карма: 22

0
Ответов: 127
Рейтинг: 0
#6: 2009-04-23 22:23:41 ЛС | профиль | цитата
Google.ru на вопрос "Как выгрузить DLL?" ответил ссылками на сайт любителей Делфи,
откуда я и скачал этот код.
Выгружает длл на лету, но второй раз она уже не грузится, программа вылетает с ошибкой.
Вот.
В форуме Dilma советовал использовать точку #doDelete (или что-то в этом роде),
и работать чисто с родными элементами Хиасм.
Хотел спросить - если использовать способ, указанный Dilma,
будет ли возможно загружать-выгружать длл во время работы программы?
И как использовать #doDelete?
Спасибо.

карма: 0

0
Разработчик
Ответов: 4698
Рейтинг: 426
#7: 2009-04-24 15:25:52 ЛС | профиль | цитата
Кстати, мне тоже очень интересно, возможно, можно добавить методы "загрузитьDLL" и "выгрузитьDLL" в оба компонента для работы с DLL и добавить св-во "загружать DLL во время запуска программы". Это полезно, если хочется сделать одним файлом прогу с DLL, прога ее скопирует и тут же загрузит
карма: 10
0
Администрация
Ответов: 15295
Рейтинг: 1519
#8: 2009-04-24 16:39:38 ЛС | профиль | цитата
nesco писал(а):
Я, как-то, и не вдавался в подробности. Перегнал, просто, и все

да это понятно...

faniss писал(а):
В форуме Dilma советовал использовать точку #doDelete

поясню чем это отличается от предложенного кода - вызывая ##Delete у динамического контейнера мы гарантируем правильную работу приложения и корректное удаление DLL. А выгрузка же по методу выше может привести
1) к зависанию программы из-за наличия бесконечного цикла
2) к краху кода, который не расчитан на то, что DLL могут выгрузить в любом месте программы.

faniss писал(а):
И как использовать #doDelete?

прочесть статью по контейнерам для начала
Контейнеры
карма: 26
0
8
Сообщение
...
Прикрепленные файлы
(файлы не залиты)