18. maj 2012 - 16:44Der er
2 kommentarer og 1 løsning
DLL + forms = problemer ???
HEJ,
Jeg har læst et eller andet sted at Windows bruger en masse DLL'ere (med eller uden forms).
Skaber jeg en DLL uden forms kører den som en drøm. Skaber jeg en DLL med form kan jeg - afhængig af form'ens komplexitet - opleve at den giver mig RUN-time error 213.
Er det en meget simpel form (f. eks en form med en LABEL på , som kan indeholde en variabel text), oplver jeg sjældent problemer. Men hvis jeg inkludere en Tedit og forventer at input-stringen fra denne TEdit skal returneres - opstår problemer (syntaks og kal/retur er korrekt iflg bogen). Jeg bruger den foreslåede MEM-MANAGER (både DLL'en og kaldende MAIN prgrm, og nogen gange går det godt andre gange får jeg E-213.
1: Hvad er error 213 (min doku om dette er mangelfuld) ?
Hvis jeg inkluderer Databaser (åbnes umiddelbart efter DLL kaldet AF DLL'ens form og lukkes umiddelbart før FORM-lukning) og andre mere komplekse komponenter går det osse godt (nogen gange), men når jeg lukker programmet (Application.Termnate; eller Close; ) vælter E-213 i en lind strøm op på skærmen (antal er = med antal gange jeg har kaldt DLL'en ). Og det HVER ENESTE GANG...
Det sjove er: En nat jeg ikke kunne sove stod jeg op og startede PC'en. efter et par Solitaire (7-kabalen) fik jeg lyst til at arbejde lidt med Delphi og DLL-problemet. Oprettede en DLL (FILE - NEW- Other -> OSV), lagde en ny form ind, lagde en enkelt funktion (showform) .. Form1 := TForm1.create(nil); (* her kom koden da det virkede *) Form1.showModal; Form1.Free; ..
Kompilerede og kørte. Og det virkede uden nogen form for problemer. (Altså INGEn 213, 217 eller noget som helst...)
(Så fik jeg blod på tanden) ...
da jeg endelig lagde mig igen (06:30) havde jeg en MAIN form med 4 buttons (som hver kaldte sin DLL med en database åbning i hver DLL (samme base i alle 4 DLL'er (for at teste ));
Åbnede og lukkede de 4 DLL'er uafhængigt af hinanden, testede oppe og nede --> Men uanset hvad jeg end gjorde så virkede det -- INGEN FEJL - ingen 213' ingen 217, ingen fejl overhovedet - og det bedste - heller ikke når jeg lukkede programmet OG delphi...
Så egentlig har jeg løst det selv, men din kode / Borrisholts indeholder noget jeg kan bruge i anden sammenhæng, så jeg vi synes at den kode er 30 point værd - ikke ??
IF Answer = 'JA' then Drop_et_svar('ja');
Kristian
Kr
PS: I den nye kode bruger jeg ikke Appl--.Terminate; kun Close, men måske skal jeg anvende
procedure DLLUnloadProc(Reason: Integer); register; begin if Reason = DLL_PROCESS_DETACH then Application := DllApplication; end;
Vil prøve det senere (i nat kan jeg nemlig godt sove
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.