Results 1 to 5 of 5

Thread: DLLcaller hangt na sluiten van dll

  1. #1

    DLLcaller hangt na sluiten van dll

    Ik heb onlangs een dll versie van onze normale applicatie geschreven (simpele functies naar bepaalde functionaliteiten). Mijn ervaringen met DLL schrijven zijn daarom nog niet om naar huis te schruiven. Dit werkt allemaal prima totdat de applicatie de dll met FreeLibrary(HandleName) uit het geheugen wil verwijderen. De caller blijft dan hangen, en Ctrl-F2 is nodig om de debugger te lossen.

    Na een stevige internet search heb ik gevonden dat alle gecreëerde objecten eerst afgesloten (free-ed) moeten zijn alvorens men een dll afsluit. Dit heb ik braaf een unit of 50 door zitten buffelen...

    Het blijkt dat alles netjes wordt opgeruimd. Nu is mijn vraag of je op een of andere manier kunt zien of er iets nog niet is opgeruimd.

    In mijn DLL worden ook nog een aantal forms aangemaakt:
    Application.CreateForm(TMainFrm, MainFrm);
    Moeten deze voor sluiten DLL worden opgeruimd, of zorgt de DLL daar zelf voor.

  2. #2
    Ja, die forms moet je ook afsluiten. De DLL zorgt nergens voor. Er zijn tools die je kunnen helpen bij het vinden van geheugenlekken, maar of alles wat de dll heeft aangemaakt ook vrijgegeven is is lastiger te zien. Daarnaast hoeft het niet alleen het geheugen te zijn, maar moet niemand ook meer terug springen naar code uit de dll. In je callstack mogen geen functies van de dll meer voorkomen. Het hangt bovendien af hoe je je constructie hebt opgebouwd. Deel je de memory manager bijvoorbeeld?
    We adore chaos because we like to restore order - M.C. Escher

  3. #3
    Bedankt, maar ik denk dat je nu al te hard gaat voor me.
    Ik heb ShareMem als eerste unit opgenomen in de uses clause (zoals aangegeven in de comments bij nieuw dll project). Ik gebruik enkel integers, booleans, doubles en PChar om te communiceren met de dll.

    Waar kan ik die forms het beste "ontladen", de createform statements zijn opgenomen in de begin...end. clause van de dll. Is daar ook iets van een finalization? Of moeten er een soort van create en destroy functies in de dll komen om deze forms te creëren en te sluiten?

  4. #4
    ShareMem zowel bij de EXE als bij de DLL? En geen runtime packages? Zet je Application van de DLL nog gelijk met die van de EXE?
    We adore chaos because we like to restore order - M.C. Escher

  5. #5
    Great minds don't think alike.

    Hier kan ik je even niet volgen. Bedankt voor de poging. Is pas mijn eerste dll, volgens mij heb ik ShareMem niet eens nodig.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •