Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
1-й вопрос на засыпку -- как система узнает из каких процессов выгружать дллку?
2-й вопрос на засыпку -- как без загрузки дллки найти точку входа в оной?
Теперь по существу. Дллка закружается и выгружается в процессе regsvr для корректной регистрации. И естественно это никак не сказывается на выгрузке ее из других процессов.
Не пытайтесь казаться глупее, чем вы есть. Хотя один плюс все же есть -- маны читать вы можете.
Это очевидно. Кроме выгрузки дллки в имплементации деинициализации индикатора (эксперта) может быть что угодно, непосредственно с этим связанное, что переводит самовольное освобождение дллки в разряд хаков, что в свою очередь не гарантирует корректной работы терминала.
Итого -- доказать, что вы не верблюд, вам уже не удастся, удачи, пыжьтесь дальше.
2All: не вздумайте его в админы взять.
А? Что?
Кто-нибудь, кто понял, переведите, плиз, сие на человеческий язык.
(нет, я ранее ошибся, TheExpert не может быть сотрудником такой компании как MetaQuotes, просто один мой ответ ему больно шибко быстро удалили).
Дядя хакер, в Ваших словах нет никакой логики: если библиотека САМА и ВСЕГДА выгружается, то почему "мой" вызов FreeLibrary по Вашим словам "не будет работать во многих случаях"? Какой может быть вред от лишнего вызова FreeLibrary в блоке deinit()? Может, вызов FreeLibrary() по-Вашему как-то заблокирует освобождение библиотеки, что-ли? Неувязочка, дядя кул хацкер, причём явная.
Это не сложно понять. Если dll сама не выгружается как положено - значит у вас кривые руки и вы совершили ошибку в коде dll, (и скорее всего в DllMain, или замаскированные эксапшены). Это единственная причина, других просто нет, так как и Виндовс и терминал предельно лояльны к dll. Теперь о FreeLibrary, которую разработчики MT4 спрятали от шаловливых ручек самонадеянных админов. Если код dll корректен - то вызов этой функции не нужен, и это кстати можно понять из документации к терминалу, так как всё само собой выгружается. Но если код ошибочен, как в вашем случае, то FreeLibrary может вызвать deadlock, и\или вызвать сбой в терминале. Обращаю внимание, FreeLibrary не гарантирует выгрузку в случае ошибочных ситуаций. Иногда FreeLibrary может помочь, а иногда наоборот, может ухудшить ситуацию. Это лотарея, по этому, в данном случае, пользоваться этой функцией нерекомендуется. А рекомендуется писать грамотный код. Конечно, если вы сделать этого не в состоянии, то вашей dll уже мало что поможет. Так то.
Собственно говоря, об этом уже много раз тут было сказано, может быть действительно перестанете прикидываться очередным форумным дурачком.
Это не сложно понять. Если dll сама не выгружается как положено - значит у вас кривые руки и вы совершили ошибку в коде dll, (и скорее всего в DllMain, или замаскированные эксапшены). Это единственная причина, других просто нет, так как и Виндовс и терминал предельно лояльны к dll. Теперь о FreeLibrary, которую разработчики MT4 спрятали от шаловливых ручек самонадеянных админов. Если код dll корректен - то вызов этой функции не нужен, и это кстати можно понять из документации к терминалу, так как всё само собой выгружается. Но если код ошибочен, как в вашем случае, то FreeLibrary может вызвать deadlock, и\или вызвать сбой в терминале. Обращаю внимание, FreeLibrary не гарантирует выгрузку в случае ошибочных ситуаций. Иногда FreeLibrary может помочь, а иногда наоборот, может ухудшить ситуацию. Это лотарея, по этому, в данном случае, пользоваться этой функцией нерекомендуется. А рекомендуется писать грамотный код. Конечно, если вы сделать этого не в состоянии, то вашей dll уже мало что поможет. Так то.
Собственно говоря, об этом уже много раз тут было сказано, может быть действительно перестанете прикидываться очередным форумным дурачком.
Дядя хацкер, обычно в такой момент ужЕ принято (даже в больших междугородных компаниях) спрашивать "чё вы там курите?", но я спрошу более вежливо:
Дядя хакёр, Вы читали рассказ Марка Твена "Как я редактировал сельскохозяйственную газету"? Читали? Там редактор газеты пишет о сборе брюквы с деревьев, не зная что такое брюква.
Да ладно, это то же дешевый трюк, пытаться "привлечь" на свою сторону "авторитетов" типа Марка Твена.
Признайтесь лучше, что в принципе не понимаете что такое dll и как оно функционирует.
Что тут непонятно то? вы плохой админ и плохой написатель dll?
Да ладно, это то же дешевый трюк, пытаться "привлечь" на свою сторону "авторитетов" типа Марка Твена.
Признайтесь лучше, что в принципе не понимаете что такое dll и как оно функционирует.
Ах вот как? Да, но дядя хацкер, этого даже сама Микрософт не знает и/или не знает как разрулить! Это среди профи так и называется "DLL HELL". Не слыхали? Вот ссылка из википедии:
https://en.wikipedia.org/wiki/Dll_hell
там в конце ещё куча ссылок, в том числе из Микрософт.
Мне приятно осознавать, дядя, что на этом форуме я виртуально познакомился с ТАКИМ человеком, который ЗНАЕТ как это всё работает и как это всё разруливать.
Dll Hell - это старая хорошо известная проблема, и пути решения её, на пользовательском уровне, хорошо известны.
Но попробуйте объяснить, как эта проблема относится в терминалу?
Есть у меня подозрения, что вы пробежали глазами эту вики но так и не поняли суть проблемы. На всякий случай напомню: "Сущность проблемы заключается в конфликте версий DLL, призванных поддерживать определённые функции. DLL hell — пример плохой концепции программирования, которая, подобно скрытой мине, приводит к резкому возрастанию трудностей при усложнении и совершенствовании системы." (я взял описание из русской вики, так как за нашей дискуссией следят русские люди).
Итак, каким образом Dll Hell относится к терминалу? и ещё, как против этой проблемы поможет regsvr32 или FreeLibrary?
Dll Hell - это старая хорошо известная проблема, и пути решения её, на пользовательском уровне, хорошо известны.
Но попробуйте объяснить, как эта проблема относится в терминалу?
Есть у меня подозрения, что вы пробежали глазами эту вики но так и не поняли суть проблемы.
Итак, каким образом Dll Hell относится к терминалу? и ещё, как против этой проблемы поможет regsvr32 или FreeLibrary?
Опять общие фразы и никакой конкретики, одно злопыхательство. DLL Hell не относится напрямую к проблеме, оно относится только к Вашему заявлению о том, что Вам в DLL всё известно, что там никаких проблем нет и что все, кто не дураки путём вдумчивого изучения какой-то там так и неназванной Вами доки может избежать ЛЮБЫХ проблем с DLL. На остальные вопросы по указанной проблеме я ответил, с цитатами и со ссылками. В отличие от Вас.
Опять общие фразы и никакой конкретики, одно злопыхательство. DLL Hell не относится напрямую к проблеме, оно относится только к Вашему заявлению о том, что Вам в DLL всё известно, что там никаких проблем нет и что все, кто не дураки путём вдумчивого изучения какой-то там так и неназванной Вами доки может избежать ЛЮБЫХ проблем с DLL. На остальные вопросы по указанной проблеме я ответил, с цитатами и со ссылками. В отличие от Вас.
Вы обидились?! Перестаньте, берите пример с меня, я же не обращаю внимание на ваши мелкие дешевые попытки унизить собеседника.
А в dll действительно нет ничего сложного, если знать на какие грабли не следует наступать, особенно это просто в той реализации которую предлагают мегаквоты.
Вы не хотите признать, что единственный путь избежать проблем с dll - это грамотно написать эту самую dll, - это глупо. Какие вам тут нужны ссылки - понять невозможно.
По моему личному опыту, проблем с динамическими библиотеками нет (при написании на delphi и c++). У меня они сразу же освобождались после отключения индикаторов, которые их использовали. Быстрое отключение индикатора + замена dll всегда удавались.
FreeLibrary использовать я бы не стал лишь потому, что мой код _не_ вызывает LoadLibrary в явном виде - исправлять чужие ошибки я не собираюсь (если они воспроизводимы и не связаны с моим кодом - проще сообщить разработчикам).
Меня берут большие сомнения насчет того, что обсуждаемая проблема есть результат неправильной работы стороннего кода (windows или mt).
Желаю всем здравствовать!
Тема заинтересовала и решил проверить обсуждаемую тему на простом примере, который идет вместе с терминалом(проект DLLSample).
После компиляции в VS 6.0, испеченная dll работает с терминалом успешно, но сама не выгружается!
Вот основная функция:
А теперь вопрос к знатокам, которые действительно разбираются в том как устроена и работает dll под виндой и знают как её правильно скомпелить в проекте под VS 6.0(к примеру).
Правильно ли выбран прототип основной функции?
Каким образом управлять потоками ATTACH/DETACH?
Где почитать об этом и желательно бы с примерами?