BOOL Apientry DllMain
Results 1 to 10 of 10

Thread: BOOL Apientry DllMain

  1. #1
    Oi;

    apenas uma pequena pergunta: eu olhei para um bom número de arquivos de origem dll MT4 e notei que alguns usam: APIDLL BOOL DENTMain enquanto outros não.

    (por exemplo, especialistas oficiais em MT4amostrasDLLSample

    Código PHP: <code> <span style = ”color: # 000000”> <span style = ”cor: # 0000BB”> </span> <span style = ”cor: # FF8000”>/ ---- -------------------------------------------------- ------------
    /||
    / ---------------------- --------------------------------------------
    <span> <span style = ”cor: # 0000BB”> BOOLAPIENTRYDllMain </span> <span style = ”cor: # 007700”> (</span> <span style = ”cor: # 0000BB”> MANUALMódulo </span > <span style = ”color: # 007700”>, </span> <span style = ”cor: # 0000BB”> DWORDul_reason_for_call </span> <span style = ”color: # 007700”>, </span> < span style = ”cor: # 0000BB”> LPVOIDlpReserved </span> <span style = ”color: # 007700”>)

    </span> <span style = ”cor: # FF8000” >/----
    </span> <span style = ”color: # 007700”> switch (</span> <span style = ”cor: # 0000BB”> ul_reason_for_call </span> <span style = ”color: # 007700”>)

    </span> <span style = ”color: # 0000BB”> DLL_PROCESS_ATTACH </span> <span style = ”color: # 00 7700 ”>: case </span> <span style =” cor: # 0000BB ”> DLL_THREAD_ATTACH </span> <span style =” color: # 007700 ”>:
    caso </span> <span style = ”cor: # 0000BB”> DLL_THREAD_DETACH </span> <span style = ”cor: # 007700”>:
    caso </span> <span style = ”color: # 0000BB”> DLL_PROCESS_DETACH <span> <span style = ”color: # 007700”>:
    quebra;
    }
    </span> <span style = ”color: # FF8000”>/--- - </span> <span style = ”color: # 007700”> retorno (</span> <span style = ”cor: # 0000BB”> VERDADEIRO </span> <span style = ”color: # 007700 ”>);

    </span> <span style =” color: # 0000BB ”> </span> </span> </code> Minha pergunta: existe alguma regra básica? que tal como o exemplo MTF deve ser incluído como padrão?

  2. #2
    A função APIENTRY (se existir) é chamada pelo windows sempre que uma DLL é carregadadescarregada e pode ser usada para alloefree memory e executar rotinas de configuração. Como um contexto é fornecido, um código adequado pode ser implementado. Isso pode ser útil para gerenciar recursos de DLL internos quando uma DLL é usada muitas vezes por um EG de apliivo por vários indiors eou por vários EAs. Leia aqui para mais informações
    http://support.microsoft.com/kb/815065

  3. #3
    Obrigado limite de alcance. Mas você diria que é aconselhável usar algo como o exemplo MT4 na maioria dos casos. Ou simplesmente deixá-lo como um número de outras dlls mt4.

  4. #4
    Você só precisa disso se precisar conectar-se ao carregamentodescarregamento, etc. Caso contrário, retornar true (o que significa sucesso) e a mesma função padrão vazia (que apenas retorna sucesso e não faz mais nada) deve ser instalada automaticamente o compiladorvinculador quando você não o declara.

  5. #5
    Muito obrigado 7bit. Muito gentil de sua parte.

  6. #6
    oi 7 bits, uma pequena pergunta: é o BOUC Apientry DllMain um pouco semelhante ao que você fez em você Pascal dll. com código PHP: <code> <span style = ”color: # 000000”> <span style = ”cor: # 0000BB”> inicialização
    PyStatus </span> <span style = ”color: # 007700”> : </span> <span style = ”cor: # 0000BB”> 0 </span> <span style = ”cor: # 007700”>;
    </span> <span style = ”color: # 0000BB ”> LoadPyDll </span> <span style =” cor: # 007700 ”> ();
    </span> <span style =” cor: # 0000BB ”> finalização
    UnloadPyDll </span > <span style = ”color: # 007700”> ();
    </span> <span style = ”color: # 0000BB”> fim </span> <span style = ”color: # 007700”> .
    </span> <span style = ”cor: # 0000BB”> </span> </span> </code> seria assim no BOBI Apientry DllMain se você escrevesse em C se assim fosse como que se parecem com: Código PHP: <code> <span style = ”color: # 000000”> <span style = ”cor: # 0000BB”> </span> <span style = ”color: # FF8000”>/ -------------------------------------------------- ----------------
    /||
    / ------------------ ------------------------------------------------ < br> </span> <span style = ”cor: # 0000BB”> BOOLAPIENTRYDllMain </span> <span style = ”cor: # 007700”> (</span> <span style = ”cor: # 0000BB”> HANDLEhModule </span> <span style = ”color: # 007700”>, </span> <span style = ”cor: # 0000BB”> DWORDul_reason_for_call </span> <span style = ”color: # 007700”>, <span> <span style = ”cor: # 0000BB”> LPVOIDlpReserved </span> <span style = ”color: # 007700”>)
    </span> <span style = ”cor : # FF8000 ”>/----
    </span> <span style =” color: # 007700 ”> alternar (</span> <span style =” cor: # 0000BB ”> ul_reason_for_call </span> <span style =” cor: # 007700 ”>)
    {
    caso </span> <span style =” color: # 0000BB ”> DLL_PROCESS_ATTACH <span> <span style = ”color: # 007700”>:
    </span> <span style = ”color: # 0000BB”> PyStatus </span> <span style = ”cor: # 007700”> = </span> <span style = ”cor: # 0000BB”> 0 </span> <span style = ”cor: # 007700”>;
    </span> <span style = ”cor: # 0000BB ”> LoadPyDll </span> <span style =” cor: # 007700 ”> ();

    caso </span> <span style =” color: # 0000BB ”> DLL_THREAD_ATTACH </span> <span style = ”color: # 007700”>: case </span> <span style = ”cor: # 0000BB”> DLL_THREAD_DETACH </span> <span style = ”color: # 007700”>: < br> case </span> <span style = ”cor: # 0000BB”> DLL_PROCESS_DETACH </span> <span style = ”cor: # 007700”>:
    </span> <span style = ”cor : # 0000BB ”> UnloadPyDll </span> <span style =” cor: # 007700 ”> ();

    quebra;
    }
    </span> <span style = ”Cor: # FF8000”>/----
    </span> <span style = ”Cor: # 007700”> retorno (</span> <span style = ”cor: # 0000BB”> VERDADEIRO </span> <span style = ”color: # 007700”>);
    }
    </span> <span style = ”color: # 0000BB”> </span> </span> </code> ou alguém colocaria isso com o DLL_THREAD_ATTACH, DLL_THREAD_DETACH

  7. #7

    oi 7 bits, uma pequena pergunta: é o BOUC Apientry DllMain um pouco semelhante ao que você fez em você Pascal dll. com código PHP: <code> <span style = ”color: # 000000”> <span style = ”cor: # 0000BB”> inicialização
    PyStatus </span> <span style = ”color: # 007700”> : </span> <span style = ”cor: # 0000BB”> 0 </span> <span style = ”cor: # 007700”>;
    </span> <span style = ”color: # 0000BB ”> LoadPyDll </span> <span style =” cor: # 007700 ”> ();
    </span> <span style =” cor: # 0000BB ”> finalização
    UnloadPyDll </span > <span style = ”color: # 007700”> ();
    </span> <span style = ”color: # 0000BB”> fim </span> <span style = ”color: # 007700”> .
    </span> <span style = ”cor: # 0000BB”> </span> </span> </code> seria assim no BOBI Apientry DllMain se você escrevesse em C se assim fosse como que se parecem com: [php]/ ---------------------------------------- -------------------------- /| |/ ----------------------------------------------- ------------------- BOOL ...
    Carregar DLLs em DllMain é uma idéia muito ruim: http://msdn.microsoft.com/en-us/library/ms682583(v=VS.85).aspx

  8. #8
    [quote = M_j; 4969179] oi, uma pequena pergunta: é o BOUC Apientry DllMain um pouco semelhante ao que você fez em você Pascal dll. com código PHP: <code> <span style = ”color: # 000000”> <span style = ”cor: # 0000BB”> inicialização
    PyStatus </span> <span style = ”color: # 007700”> : </span> <span style = ”cor: # 0000BB”> 0 </span> <span style = ”cor: # 007700”>;
    </span> <span style = ”color: # 0000BB ”> LoadPyDll </span> <span style =” cor: # 007700 ”> ();
    </span> <span style =” cor: # 0000BB ”> finalização
    UnloadPyDll </span > <span style = ”color: # 007700”> ();
    </span> <span style = ”color: # 0000BB”> fim </span> <span style = ”color: # 007700”> .
    </span> <span style = ”color: # 0000BB”> </span> </span> </code> Sim, é chamado exatamente dentro dessa função. O binário compilado sempre conterá automaticamente o código da biblioteca de tempo de execução que é sempre necessária e uma parte deste código é uma função DllMain (bastante ajustada e flexível) que faz muitas coisas automaticamente (inicializardesinicializar o gerenciamento de heap, tratamento de exceções, Thread armazenamento local, etc), coisas que você teria que fazer manualmente em C. Existem alguns lugares onde você pode ligar em tudo isso de uma maneira padronizada semelhante a Pascal, um desses lugares (existem mais alguns) é a inicialização e seções de finalização. Eles são chamados de dentro do DllMain (). aqui na linha 27 é a função RTL que irá lidar com a maior parte da chamada DllMain () (não é chamado diretamente de DllMain (), ainda há um pouco mais de magia de compilador envolvida em torno dele)
    http://svn.freepascal.org/cgi-bin/vi...nc?view=markupseções de inicialização e finalização são chamadas de algum lugar dentro dos procedimentos PascalMain e FPC_Do_Exit que são chamados lá. Como você pode ver, existem mais alguns lugares possíveis para conectar, atribuindo certas variáveis ​​de procedimento que são chamadas lá. Isso é tudo coisas realmente hardcore dentro da biblioteca de tempo de execução que é apenas para ser entendido por aqueles hackers no compilador e na própria RTL. Se você fizer o download dessas fontes e tentar seguir todas essas chamadas para ver o que está acontecendo (ou passar por elas com o depurador), descobrirá que elas estão realmente cumpridas e que muitas coisas estão acontecendo sob o capô para fazer com que O programa idêntico Pascal (ou biblioteca) compila e roda tão facilmente em uma ampla gama de arquiteturas e sistemas operacionais. Usuários normais (programadores) apenas usam as seções de inicialização e finalização (se precisarem deles ou os deixam de fora) (e talvez algumas das outras funções de gancho conforme são documentadas) e não se preocupem com tudo isso e tudo deve funcionar. Mas ainda é interessante olhar para esse código e pelo menos tentar entendê-lo (até agora só compreendi partes dele, mas não sou um dos hackers do compilador, então não preciso saber tudo).

  9. #9

  10. #10

    Carregar DLLs no DllMain é uma ideia muito ruim:
    http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx
    porque isso pode criar loops de dependência na ordem de carregamento da DLL. Neste caso simples (minha ligação de python) este problema não pode surgir. Mas é verdade que a cautela é necessária e apenas coisas simples e independentes são feitas dentro de DllMain (), porque, em última análise, é o sistema operacional que está chamando essa função e não é fácil confiar na ordem exata em que são chamadas. em situações complexas ou em que momentos exatamente eles são chamados.

Permissões de Publicação

  • Não pode publicar novos tópicos
  • Não pode publicar respostas
  • Não pode publicar anexos
  • Não pode editar as suas publicações
  •  
  • Código BB está Ativo
  • Smilies estão Ativos
  • Código [IMG] está Ativo
  • Código [VIDEO] está Ativo
  • Código HTML está Desligado
O site da tradingintuitivo utiliza cookies
O site da tradingintuitivo utiliza cookies, alguns já foram definidos. Pode ler sobre a nossa utilização de cookies aqui. Por favor, clique no botão à direita para aceitar os nossos cookies. Se continuar a usar o site da tradingintuitivo, vamos supor que aceita os nossos cookies.