как выгрузить dll - страница 11

 
AlexEro >>:

Попробую предположить, что дело не обязательно в тестере МТ. Если в тестере МТ каким-то образом стоит цикл LoadLibrary вначале ... FreeLibrary в конце, и ентот цикл выполняется много раз, то винда тупо локирует DLL-ку в памяти до лучших времён и не думает производить никаких действий по её освобождению, а только их имитирует . Это делается в Винде для кэширования часто используемых библиотек.


Предполагать можно всё что угодно, но вот результаты простого эксперимента показывают, что dll из тестера выгружается. Зачем все эти выдумки, не понятно. Если тестер не закрывать, то да, dll будет висеть, но после закрытия тестера она освобождается. По крайней мере у меня так.

 
HideYourRichess >>:

Предполагать можно всё что угодно, но вот результаты простого эксперимента показывают, что dll из тестера выгружается. Зачем все эти выдумки, не понятно. Если тестер не закрывать, то да, dll будет висеть, но после закрытия тестера она освобождается. По крайней мере у меня так.


Ой, меня посетила страшная мысль - а может HideYourRichess - это именно тот сотрудник MetaQuotes, который и написал тот блок выгрузки DLL в МТ4? Тогда всё, вопросов больше нет. Раз у него работает, то и у других просто ОБЯЗАНО работать.

 
В ход пошла теория заговора разработчиков MT против бедных программистов.
 

И я у себя проверил - в данном конкретном случае простейшую DLL-ку jartmailru держит тестер. Шибко держит ея, касатик, и не пущает ея, супостат. Что впрочем нормально и обьяснимо.

Process Explorer (с плагином) ессно её всё равно выгружает - по hard unload.

Unlocker 1.8.7 у меня вообще не пашет (?).

Кстати, если библиотека использует COM+ 2.0, да ещё многопоточная (то есть сложная, как я ужЕ говорил ранее), то Микрософт указывает задержку в 10 МИНУТ её/их реальной выгрузки, правда речь идёт о другой функции освобождения:


CoFreeUnusedLibraries does not immediately release DLLs that have no active object. There is a ten minute delay for multithreaded apartments (MTAs) and neutral apartments (NAs). For single-threaded apartments (STAs), there is no delay. The ten minute delay for CoFreeUnusedLibraries is to avoid multithread race conditions caused by unloading a component DLL.

http://support.microsoft.com/kb/301357

 
HideYourRichess >>:

Я охотно верю, что у вас чего то там не работает, но вашу подозрительную длл я запускать не стал. Мне лень её компилировать из вашего VC8.0 в VC6.0. Так же мне лень проверять версии используемых crt на совместимость. В обыкновенном фаре видно, что у вас длл линкуется к msvcr80, а в примере используется msvcrt. Мелочь, а не приятно. Ну и т.д.

Только данный факт к делу отношения не имеет, господин Скользкий.

Со скриптом-то - все выгружается.

Ой... опять опозорились :-).

Ну ничего.

Теперь относительно:

HideYourRichess >>:

Предполагать можно всё что угодно, но вот результаты простого эксперимента показывают, что dll из тестера выгружается. Зачем все эти выдумки, не понятно. Если тестер не закрывать, то да, dll будет висеть, но после закрытия тестера она освобождается. По крайней мере у меня так.

Ну вот.

Человек дошел до тестов.

Добро пожаловать в реальный мир!

.

Проверил закрытие панельки тестера.

Вот ведь сколько всего умного напрограммировали в метатрейдере!

Правда, без учета цикла разработки этих самых Dll-ек- но это мелочи.

Только в работе проще закрыть весь метатрейдер :-).

.

Самое главное: не нужно закрытие панели тестера выдвигать как очевидный факт и аргумент,

хотя талант исследователя в случаях, когда нужно "завалить" оппонента,

у вас, несомненно, есть. Сколько у вас, говорите, на данный момент подчиненных?

.

Фраза в оригинале должна звучать должна так:

Тестер будет держать Dll до закрытия метатрейдера-

если не сделать неочевидный ход и не закрыть панель тестера :-).

.

Итого: если с вашей Dll не закрыть панель тестера- то в ней есть ошибки как у всех! :-P

 

Process Explorer (с плагином) ессно её всё равно выгружает даже с тестером - по hard unload.

Повторный запуск тестера после выгрузки DLL через PrExpl - без проблем. То есть лично я бы скорее классифицировал сие неудобство (назовём это так) как глюк тестера, а не как фичу. Серъёзные люди будут ваять свои DLL в другом окне, зачем им прыгать по разным окнам, закрывать их, открывать?

 
AlexEro >>:

И я у себя проверил - в данном конкретном случае простейшую DLL-ку jartmailru держит тестер. Шибко держит ея, касатик, и не пущает ея, супостат. Что впрочем нормально и обьяснимо.


Чей это косяк? я считаю - криворукого программиста. По тому как другая dll, от другого программиста, не делает так.

 
HideYourRichess >>:

Чей это косяк? я считаю - криворукого программиста.

Это в каком смысле, дядя? Ея держит ТЕСТЕР от MT - MQ, который ея не выгружает по FreeLibrary. Шож ты гонишь на свою компанию? Сам же этот косяк написал, а теперь нас на форуме спрашиваешь?

 

(звонким детским голосом, как в сталинских пионерских фильмах 1940-1950-х годов)

ребята! а давайте поможем компании MetaQuotes! нам же самим будет легче писать программы под MQL4! давайте расскажем ведущему программисту MetaQuotes под ником HideYourRichess как устроены, как загружаются, выгружаются и как работают DLL-ки! Давайте? А?! Ставлю на голосование. Кто "за" - прошу поднять руки и сервис windows messaging service.

 

Дебил.