BOOL Apientry DllMain
Results 1 to 10 of 10

Thread: BOOL Apientry DllMain

  1. #1
    Hoi;

    slechts een kleine vraag: ik keek naar een goed aantal MT4 dll-bronbestanden en ik merkte dat sommigen gebruikten: BOOL APIENTRY DllMain, terwijl anderen dat niet waren.

    (bijvoorbeeld offici�le MT4-expertsvoorbeeldenDLLSample

    PHP-code: <code> <span style = ???color: # 000000???> <span style = ???color: # 0000BB???> </span> <span style = ???color: # FF8000???>/ ---- -------------------------------------------------- ------------
    /||
    / ---------------------- --------------------------------------------
    <span> <span style = ???color: # 0000BB???> BOOLAPIENTRYDllMain </span> <span style = ???color: # 007700???> (</span> <span style = ???color: # 0000BB???> HANDLEhModule </span > <span style = ???color: # 007700???>, </span> <span style = ???color: # 0000BB???> DWORDul_reason_for_call </span> <span style = ???color: # 007700???>, </span> < span style = ???color: # 0000BB???> LPVOIDlpReserved </span> <span style = ???color: # 007700???>)
    {
    </span> <span style = ???color: # FF8000??? >/----
    </span> <span style = ???color: # 007700???> schakelen (</span> <span style = ???color: # 0000BB???> ul_reason_for_call </span> <span style = ???color: # 007700???>)
    {
    case </span> <span style = ???color: # 0000BB???> DLL_PROCESS_ATTACH </span> <span style = ???color: # 00 7700 ???>:
    naamruimte </span> <span style =??? color: # 0000BB ???> DLL_THREAD_ATTACH </span> <span style =??? color: # 007700 ???>:
    case </span> <span style = ???color: # 0000BB???> DLL_THREAD_DETACH </span> <span style = ???color: # 007700???>:
    case </span> <span style = ???color: # 0000BB???> DLL_PROCESS_DETACH <span> <span style = ???color: # 007700???>:
    break;
    }
    </span> <span style = ???color: # FF8000???>/--- -
    </span> <span style = ???color: # 007700???> return (</span> <span style = ???color: # 0000BB???> TRUE </span> <span style = ???color: # 007700 ???>);
    }
    </span> <span style =??? color: # 0000BB ???> </span> </span> </code> Mijn vraag: is er een vuistregel? dat bijvoorbeeld het MTF-monster als standaard moet worden opgenomen?

  2. #2
    De APIENTRY-functie (indien aanwezig) wordt door vensters aangeroepen wanneer een DLL wordt geladenontladen en kan worden gebruikt om geheugen vrij te makenvrij te maken en instellingsroutines uit te voeren. Aangezien een context wordt geleverd, kan geschikte code worden ge�mplementeerd. Dit kan handig zijn voor het beheren van interne DLL-bronnen wanneer een DLL vaak wordt gebruikt door een app EG met meerdere indiors en of door meerdere EA's. Lees hier voor meer info
    http://support.microsoft.com/kb/815065

  3. #3
    Bedankt bereik gebonden. Maar zou u zeggen dat het raadzaam is om in de meeste gevallen zoiets als het MT4-voorbeeld te gebruiken. Of laat het eruit zoals een aantal andere mt4-dll's doen.

  4. #4
    Je hebt het alleen nodig als je moet inhaken in het ladenlossen, enz. Anders is het alleen om terug te keren naar waar (wat betekent succes) en dezelfde lege standaardfunctie (die alleen succes oplevert en niets anders doet) moet automatisch worden ge�nstalleerd door de compilerlinker wanneer u het zelf niet declareert.

  5. #5
    Heel erg bedankt, 7bit. Heel aardig van je.

  6. #6
    hallo 7bit, een kleine vraag: is de BOOL Apientry DllMain enigszins vergelijkbaar met wat je in je hebt gedaan Pascal dll. met PHP-code: <code> <span style = ???color: # 000000???> <span style = ???color: # 0000BB???> initialisatie
    PyStatus </span> <span style = ???color: # 007700???> : = </span> <span style = ???color: # 0000BB???> 0 </span> <span style = ???color: # 007700???>;
    </span> <span style = ???color: # 0000BB ???> LoadPyDll </span> <span style =??? color: # 007700 ???> ();
    </span> <span style =??? color: # 0000BB ???> finalisatie
    UnloadPyDll </span > <span style = ???color: # 007700???> ();
    </span> <span style = ???color: # 0000BB???> end </span> <span style = ???color: # 007700???> .
    </span> <span style = ???color: # 0000BB???> </span> </span> </code> zou zo naar de BOOL Apientry DllMain gaan als je het zou schrijven in C , zo ja, hoe zou die er als volgt uitzien: PHP-code: <code> <span style = ???color: # 000000???> <span style = ???color: # 0000BB???> </span> <span style = ???color: # FF8000???>/ -------------------------------------------------- ----------------
    /||
    / ------------------ ------------------------------------------------ < br> </span> <span style = ???color: # 0000BB???> BOOLAPIENTRYDllMain </span> <span style = ???color: # 007700???> (</span> <span style = ???color: # 0000BB???> HANDLEhModule </span> <span style = ???color: # 007700???>, </span> <span style = ???color: # 0000BB???> DWORDul_reason_for_call </span> <span style = ???color: # 007700???>, <span> <span style = ???color: # 0000BB???> LPVOIDlpReserved </span> <span style = ???color: # 007700???>)
    {
    </span> <span style = ???kleur : # FF8000 ???>/----
    </span> <span style =??? color: # 007700 ???> schakelen (</span> <span style =??? kleur: # 0000BB ???> ul_reason_for_call </span> <span style =??? color: # 007700 ???>)
    {
    case </span> <span style =??? color: # 0000BB ???> DLL_PROCESS_ATTACH <span> <span style = ???color: # 007700???>:
    </span> <span style = ???color: # 0000BB???> PyStatus </span> <span style = ???color: # 007700???> = </span> <span style = ???color: # 0000BB???> 0 </span> <span style = ???color: # 007700???>;
    </span> <span style = ???color: # 0000BB ???> LoadPyDll </span> <span style =??? color: # 007700 ???> ();

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

    pauze;
    }
    </span> <span style = ???Color: # FF8000???>/----
    </span> <span style = ???Color: # 007700???> return (</span> <span style = ???color: # 0000BB???> TRUE </span> <span style = ???color: # 007700???>);
    }
    </span> <span style = ???color: # 0000BB???> </span> </span> </code> of zou u dit met DLL_THREAD_ATTACH, DLL_THREAD_DETACH plaatsen

  7. #7

    Quote Originally Posted by ;
    hallo 7bit, een kleine vraag: is de BOOL Apientry DllMain enigszins vergelijkbaar met wat je in je hebt gedaan Pascal dll. met PHP-code: <code> <span style = ???color: # 000000???> <span style = ???color: # 0000BB???> initialisatie
    PyStatus </span> <span style = ???color: # 007700???> : = </span> <span style = ???color: # 0000BB???> 0 </span> <span style = ???color: # 007700???>;
    </span> <span style = ???color: # 0000BB ???> LoadPyDll </span> <span style =??? color: # 007700 ???> ();
    </span> <span style =??? color: # 0000BB ???> finalisatie
    UnloadPyDll </span > <span style = ???color: # 007700???> ();
    </span> <span style = ???color: # 0000BB???> end </span> <span style = ???color: # 007700???> .
    </span> <span style = ???color: # 0000BB???> </span> </span> </code> zou zo naar de BOOL Apientry DllMain gaan als je het zou schrijven in C , zo ja, hoe zou die er als volgt uitzien: [php]/ ---------------------------------------- -------------------------- /| |/ ----------------------------------------------- ------------------- BOOL ...
    Het laden van DLL's in DllMain is een zeer slecht idee: http://msdn.microsoft.com/en-us/library/ms682583(v=VS.85).aspx

  8. #8
    [quote = M_j; 4969179] hoi, een kleine vraag: is de BOOL Apientry DllMain enigszins vergelijkbaar met wat je in je hebt gedaan Pascal dll. met PHP-code: <code> <span style = ???color: # 000000???> <span style = ???color: # 0000BB???> initialisatie
    PyStatus </span> <span style = ???color: # 007700???> : = </span> <span style = ???color: # 0000BB???> 0 </span> <span style = ???color: # 007700???>;
    </span> <span style = ???color: # 0000BB ???> LoadPyDll </span> <span style =??? color: # 007700 ???> ();
    </span> <span style =??? color: # 0000BB ???> finalisatie
    UnloadPyDll </span > <span style = ???color: # 007700???> ();
    </span> <span style = ???color: # 0000BB???> end </span> <span style = ???color: # 007700???> .
    </span> <span style = ???color: # 0000BB???> </span> </span> </code> Ja, het wordt van binnen precies die functie aangeroepen. Het gecompileerde binaire bestand bevat altijd automatisch de code uit de runtime-bibliotheek die altijd nodig is en een deel van deze code is een (vrij toegankelijke en flexibele) DllMain-functie die automatisch een heleboel dingen doet (initialisatiede�nitialisatie van heap-beheer, uitzonderingsafhandeling, thread lokale opslag, enz.), dingen die je in C handmatig zou moeten doen. Er zijn een paar plaatsen waar je dit allemaal kunt vastmaken op een gestandaardiseerde Pascal-achtige manier, een van deze plaatsen (er zijn er nog een paar) is de initialisatie en afrondingssecties. Ze worden aangeroepen vanuit de DllMain (). hier op regel 27 is de RTL-functie die het grootste deel van de DllMain () -aanroep afhandelt (die niet direct DllMain () wordt genoemd, er is nog steeds een beetje meer compiler-magie omheen gewikkeld)
    http://svn.freepascal.org/cgi-bin/vi...nc?view=markupinitialisatie- en finalisatiesecties worden ergens binnen de PascalMain- en FPC_Do_Exit-procedures aangeroepen die daar worden aangeroepen. Zoals je kunt zien, zijn er nog enkele andere mogelijke plaatsen om in te haken door bepaalde procedurevariabelen toe te wijzen die daar worden genoemd. Dit is allemaal echt hardcore spul in de runtime-bibliotheek dat alleen bedoeld is om begrepen te worden door degenen die hacken op de compiler en de RTL zelf. Als je deze bronnen downloadt en probeert om al deze gesprekken te volgen om te zien wat er aan de hand is (of er doorheen te stappen met de debugger), zul je merken dat het eigenlijk vrij is en dat er veel dingen onder de motorkap gaande zijn om de identieke Pascal-programma (of bibliotheek) compileren en uitvoeren zo gemakkelijk op zo een breed scala aan architecturen en besturingssystemen. Normale gebruikers (programmeurs) gebruiken gewoon de initialisatie- en finalisatiegedeelten (als ze die nodig hebben of laten ze weg) (en misschien werkt een deel van de andere haak zoals ze zijn gedocumenteerd) en maak je daar geen zorgen over en alles zou gewoon moeten werken. Maar het is nog steeds interessant om naar deze code te kijken en het in ieder geval te proberen te begrijpen (ik heb tot nu toe slechts een deel ervan begrepen, maar ik ben niet een van de compiler-hackers, dus ik hoef niet alles te weten).

  9. #9

  10. #10

    Quote Originally Posted by ;
    Het laden van DLL's in DllMain is een heel slecht idee:
    http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx
    omdat dit afhankelijk lussen in de DLL-laadvolgorde kan maken. In dit eenvoudige geval (mijn pythonbinding) kan dit probleem niet ontstaan. Maar het is waar dat voorzichtigheid geboden is en dat alleen eenvoudige en op zichzelf staande dingen binnen DllMain () worden gedaan, omdat uiteindelijk het besturingssysteem deze functie aanroept en het niet eenvoudig is om te vertrouwen op de exacte volgorde waarin ze worden genoemd in complexe situaties of op welke tijden precies ze worden genoemd.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
This website uses cookies
We use cookies to store session information to facilitate remembering your login information, to allow you to save website preferences, to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners.