como descarregar a dll - página 5

 
TheXpert >> :

1ª pergunta - como o sistema sabe de quais processos para descarregar a dll?

Pergunta 2 - como posso encontrar o ponto de entrada sem carregar a dll?


Agora, essencialmente. A dll é carregada e descarregada durante a regsvr para um registro correto. E é claro que isto não tem nenhum efeito sobre o descarregamento de outros processos.

Não tente parecer mais estúpido do que você é. Mas há uma coisa boa, você pode ler mana.

Obviamente. Além da descarga da dll na implementação da desinicialização do indicador (Expert Advisor), você pode fazer qualquer coisa diretamente relacionada a ela, o que transforma a liberação não autorizada da dll em um hack, o que por sua vez não garante o correto funcionamento do terminal.


Em resumo - você não poderá provar que não é um tolo, boa sorte, continue empurrando.

2Todos: não pense em contratá-lo como administrador.

А? O quê?

Alguém que entenda, por favor, traduza isto para a linguagem humana.

(não, eu estava enganado antes, TheExpert não pode ser funcionário de uma empresa como MetaQuotes, apenas uma de minhas respostas foi apagada muito rapidamente)

 
AlexEro >> :
Tio hacker, não há lógica em suas palavras: se a biblioteca é SEMPRE descarregada, por que "minha" chamada FreeLibrary de acordo com você "não vai funcionar em muitos casos"? Que mal poderia acontecer com uma chamada extra da FreeLibrary no bloco deinit()? Chamar a FreeLibrary() em sua opinião bloquearia de alguma forma a liberação da biblioteca ou algo assim? Isso não está certo, tio kool hacker, e é óbvio.

Não é difícil de entender. Se a dll em si não descarrega corretamente - então você tem uma mão ruim e cometeu um erro no código dll, (e muito provavelmente no DllMain, ou exapses mascarados). Esta é a única razão, não há outras, já que tanto o Windows quanto o Terminal são extremamente fiéis à dll. Agora sobre a FreeLibrary, que os desenvolvedores da MT4 esconderam das mãos malandrecas de administradores presunçosos. Se o código dll estiver correto - a chamada desta função é desnecessária, e isto pode ser compreendido pela documentação do terminal, pois tudo é descarregado por si só. Mas se o código estiver errado, como no seu caso, a FreeLibrary pode causar um impasse e/ou travar o terminal. Note que a FreeLibrary não garante o descarregamento em situações de erro. Algumas vezes a FreeLibrary pode ajudar e outras vezes o oposto pode piorar as coisas. Isto é uma loteria, portanto, não é recomendado o uso desta função neste caso. É recomendável que você escreva um bom código. É claro que se você não puder fazer isso, sua dll não pode ajudá-lo. Isso é verdade.


Na verdade, isso já foi dito aqui muitas vezes, talvez realmente pare de fingir ser apenas mais um idiota do fórum.

 
HideYourRichess >> :

Isto não é difícil de entender. Se a dll em si não for descarregada corretamente, significa que você tem mãos ruins e cometeu um erro no código da dll, (e muito provavelmente no DllMain, ou exapses mascarados). Esta é a única razão, não há outras, já que tanto o Windows quanto o Terminal são extremamente fiéis à dll. Agora sobre a FreeLibrary, que os desenvolvedores da MT4 esconderam das mãos malandrecas de administradores presunçosos. Se o código dll estiver correto - a chamada desta função é desnecessária, e isto pode ser compreendido pela documentação do terminal, pois tudo é descarregado por si só. Mas se o código estiver errado, como no seu caso, a FreeLibrary pode causar um impasse e/ou travar o terminal. Note que a FreeLibrary não garante o descarregamento em situações de erro. Algumas vezes a FreeLibrary pode ajudar e outras vezes o oposto pode piorar as coisas. Isto é uma loteria, portanto, não é recomendado o uso desta função neste caso. É recomendável que você escreva um bom código. É claro que se você não puder fazer isso, sua dll não pode ajudá-lo. Isso é verdade.


Na verdade, isso já foi dito aqui muitas vezes, talvez seja melhor você parar de fazer o papel de tolo do fórum.

Tio hacker, geralmente em uma época como esta é costume (mesmo em empresas de longa distância) perguntar "o que você está fumando lá?", mas vou perguntar de forma mais educada:

Tio hacker, você leu "Como eu editei um jornal agrícola" de Mark Twain? Você já? Ali, o editor do jornal escreve sobre a extração de rutabagas das árvores sem saber o que é uma rutabaga.

 

Vá lá, também é um truque barato para tentar "colocar" "autoridades" como Mark Twain do seu lado.


Admita que você não entende o que é uma dll e como ela funciona.


O que não se deve entender? Você é um mau administrador e um péssimo redator de dll?

 
HideYourRichess >> :

Vamos lá, é o mesmo truque barato, tentando "colocar" "autoridades" como Mark Twain do seu lado.


Admita que você não entende o que é uma dll e como ela funciona.


Oh, é assim que funciona? Sim, mas o tio hacker, mesmo a própria Microsoft não sabe disso e/ou não sabe como consertá-lo! É chamado de "DLL HELL" entre os profissionais. Você ainda não ouviu falar? Aqui está o link da wikipedia:

https://en.wikipedia.org/wiki/Dll_hell

Há um monte mais de links no final, incluindo alguns da Microsoft.

Estou feliz em saber, tio, que praticamente conheci alguém neste fórum que SABE como tudo isso funciona e como lidar com tudo isso.

 

Dll Hell é um velho problema bem conhecido, e as formas de resolvê-lo, a nível de usuário, são bem conhecidas.


Mas tente explicar como este problema se relaciona com o terminal?


Suspeito que você tenha desnatado este wiki e ainda não tenha compreendido a essência do problema. Só por precaução, deixe-me lembrar: "A essência do problema é um conflito de versões DLL destinadas a suportar certas funções. DLL inferno é um exemplo de um mau conceito de programação, que, como uma mina oculta, leva a um forte aumento das dificuldades com a complicação e melhoria do sistema" (tomei a descrição do wiki russo, já que o povo russo segue nossa discussão).


Então, como o Dll Hell se relaciona com o terminal? E também, como o regsvr32 ou a FreeLibrary podem ajudar contra este problema?

 
HideYourRichess >> :

Dll Hell é um velho problema bem conhecido, e as formas de resolvê-lo, a nível de usuário, são bem conhecidas.


Mas tente explicar como este problema se relaciona com o terminal?


Tenho um palpite de que você já deu uma olhada neste wiki e ainda não entendeu o problema.


E também, como a Dll Hell se relaciona com o terminal? E como a regsvr32 ou a FreeLibrary podem ajudar contra este problema?

Mais uma vez, frases gerais e nenhuma específica, apenas observações maliciosas. DLL O inferno não está diretamente relacionado ao problema, está apenas relacionado à sua declaração de que você sabe tudo sobre DLL, que não há problemas e que todos que são inteligentes podem evitar QUALQUER problema com DLL através de um estudo atencioso de alguma doca sem nome. Respondi ao restante das perguntas sobre o problema acima, com citações e links. Ao contrário de você.

 
AlexEro >> :

Mais uma vez, frases gerais e nenhuma específica, apenas rancores. DLL O inferno não está diretamente relacionado ao problema, refere-se apenas à sua declaração de que você sabe tudo sobre DLL, que não há problemas e que todos que não são estúpidos pelo estudo atencioso de algum doku sem nome podem evitar QUALQUER problema com DLL. Respondi ao restante das perguntas sobre o problema acima, com citações e links. Ao contrário de você.

Você está ofendido?! Vamos lá, pegue meu exemplo, não presto atenção a suas tentativas mesquinhas e baratas de humilhar seu interlocutor.


E realmente não há nada de complicado na dll, se você sabe em qual rake você não deve pisar, especialmente é simples na implementação oferecida pelas mega cotas.


Você não quer admitir que a única maneira de evitar problemas com a dll é escrever esta mesma dll de forma competente - é estúpido. As referências de que você precisa aqui são impossíveis de entender.

 

Em minha experiência pessoal, não há problema com bibliotecas dinâmicas (quando escrevo em delphi e c++). Eu as liberei imediatamente após desativar os indicadores que as utilizavam. Desativar rapidamente o indicador + substituir a dll sempre foi bem sucedido.

Eu não usaria a FreeLibrary só porque meu código _não_ chama a LoadLibrary explicitamente - não vou corrigir os erros de outra pessoa (se eles forem reproduzíveis e não relacionados ao meu código - é mais fácil informar os desenvolvedores).

Tenho fortes dúvidas de que este problema seja resultado de um código de terceiros (janelas ou mt) que não funciona corretamente.

 

Saudações a todos!

O tópico ficou interessante e decidiu verificar o tópico discutido em um exemplo simples que vem com o terminal(projeto DLLSample).

Após a compilação no VS 6.0, a dll cozida funciona com sucesso com o terminal, mas não se descarrega sozinha!

Esta é a função principal:

BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
  {
//----
   switch( ul_reason_for_call)
     {
      case DLL_PROCESS_ATTACH:
      case DLL_THREAD_ATTACH:
      case DLL_THREAD_DETACH:
      case DLL_PROCESS_DETACH:
         break;
     }
//----
   return(TRUE);
  }

E agora uma pergunta para os conhecedores que realmente entendem como a dll é e funciona sob o vento e sabem como compilá-la corretamente em um projeto sob o VS 6.0(por exemplo).

O protótipo da função principal é correto?

Como administrar os fluxos ATTACH/DETACH?

Onde ler sobre isso e de preferência com exemplos?