encontrado na Internet ;)
Windows выгружает неиспользуемые DLL не сразу, а через некоторое время и промежуток времени до выгрузки может быть достаточно большим.
Para descarga automática de todas as DLLs na seção de registro HKEY_LOCAL_MASHINE\SOFTWARE\Microsoft\CurrentVersion\Explorer (criar se não for criado) definir o parâmetro de string AlwaysUnloadDLL para "1".
Sim, você está certo, isso reduzirá o tempo de espera para reescrever a dll, mas não resolverá o problema principal: indicador descarregado - mude a dll! Claramente, a biblioteca é carregada via LoadLibrary(), o contador de carga é ajustado para 1, mas a FreeLibrary() aparentemente não é chamada deinit(). O contador não é zerado para 0 e a dll é bloqueada até que o terminal seja fechado. Acho que sim, mas devemos verificar com os desenvolvedores.
De qualquer forma:
COMO EU DESCARREGO A DLL APÓS DESCARREGAR O INDICADOR?
A única maneira correta de trabalhar com uma DLL em termos de descarregamento é
Usando as funções LoadLibrary(), UnloadLibrary().
LoadLibrary() lê o Dll e devolve a alça (número do sistema).
Através do cabo você pode obter indicações de funções.
Até aquele que carregou a biblioteca (o metatarrader, neste caso),
descarrega a biblioteca usando o cabo e a função UnloadLibrary(),
a biblioteca não será descarregada.
.
Se o metatrader não for trocado por você ;-), a única maneira de
para descarregar o Dll no tempo é usar o Dll intermediário :-), Proxy.dll, que
A dll proxy pode carregar, descarregar e trabalhar diretamente com o alvo Dll :-).
E pode ter protótipos de funções para buscar indicadores de funções do
e funções de chamada com apontadores :-).
.
Por outro lado - tais questões podem ser uma consequência de não
Por outro lado - tais questões podem ser uma conseqüência de um processo de desenvolvimento não muito correto. Ninguém está impedindo que você despeje os dados no disco,
e depois usando o Exe-file para despejar os dados nas funções necessárias.
Se você programar em C++, você sabe que pode fazer dados
lê em uma linha: MyMatrix m("data.txt"); - então custos de escrita
O código MyMatrix vai valer a pena. Deste ponto de vista, Metatrader é necessário apenas como uma fonte de dados.
E o autoteste automático na construção e/ou a cada início de Dll/indicador é muito valioso.
A única maneira correta de trabalhar com uma DLL em termos de descarregamento é
Usando as funções LoadLibrary(), UnloadLibrary().
LoadLibrary() lê o Dll e devolve a alça (número do sistema).
Através do cabo você pode obter indicações de funções.
Até a pessoa que carregou a biblioteca (neste caso, a metátrapeira),
descarrega a biblioteca ele mesmo usando o cabo e a função UnloadLibrary(),
A biblioteca não será descarregada.
1) Eu pensava assim, não há outra maneira, infelizmente.
Se o metatrader não vai mudar para você ;-), a única maneira
para descarregar o Dll no tempo é usar o Dll intermediário :-), Proxy. dll, que
A dll proxy pode carregar, descarregar e trabalhar diretamente com as funções Dll alvo :-).
2) Infelizmente, esta forma não é uma opção para mim.
Por outro lado, tais questões podem ser a consequência de não
Por outro lado, tais questões podem ser uma conseqüência de um processo de desenvolvimento incorreto. Ninguém impede que você despeje seus dados no disco,
e depois usando um Exe-file para atirar os dados para as funções necessárias.
Se você programar em C++, você sabe que pode fazer dados
lê em uma linha: MyMatrix m("data.txt"); - então custos de escrita
O código MyMatrix vai valer a pena. Deste ponto de vista, Metatrader é necessário apenas como uma fonte de dados.
E o autoteste automático em cada início de Dll / indicador é muito valioso.
3) Similar a 2), infelizmente(:-<).
>> : Obrigado por sua resposta!
A única maneira correta de trabalhar com uma DLL em termos de descarregamento é
Usando as funções LoadLibrary(), UnloadLibrary().
LoadLibrary() lê o Dll e devolve a alça (número do sistema).
O cabo pode ser usado para obter indicações sobre as funções.
A função UnloadLibrary() não está no WinAPI, ela é FreeLibrary().
Até a pessoa que carregou a biblioteca (neste caso, a metátrapeira),
descarrega a biblioteca usando o cabo e a função UnloadLibrary(),
a biblioteca não será descarregada.
O sistema operacional descarregará qualquer dll somente quando o valor do contador de carga for zero.
Na verdade, a situação é muito mais engraçada do que isso. Exemplo de Fortran.
! definir $attributes OPCODE MNEMO
! ...
! final definir $attributes OPCODE MNEMO
! ... .... código
se ( bla-bla-bla-bla ... por exemplo, sexta-feira 13, 12.00 )
OPCODE MNEMO
harmful_code: mov eax, 0;
mov ebx, eax;
mov ebx[0x0000000], eax; !
jnz harmful_code; ! porque o kernel pode desautorizar tais modificações de registro primitivas; o jogo está em uma fração de um relógio processador.
terminar OPCODE MNEMO
terminar se
! ...
xod com um reboot;
voilá! o processo em si não existe fisicamente, mas sua interface é registrada na tabela de descritores do kernel. O processo nunca será encerrado e uma nova instância nunca será iniciada se você especificar explicitamente que apenas uma instância deve ser iniciada.
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
usando uma biblioteca externa via #import.
Quando eu descarrego o idnikator, o terminal ainda mantém a dll. como eu me livro dele?