|
Název: IEpsnet a Delphi - neuvolňování paměti Přispěvatel: libor 27.09.2013, 10:40:22 Využívám na systému PL2, komunikační protokol Epsnet (IEpsnet). Řídící program je napsán v Delphi7 a celé zařízení je řízeno z hlavního PC. Jelikož však komunikační linka je používána ještě dalším zařízením s jiným komunikačním protokolem, tak linku po odečtení uvolňuji, přičemž mi vzniká problém s vícenásobným alokováním paměti.
Nedaří se mi uvolnit paměť. Prosím o radu jak paměť uvolnit. Přikládám výňatek z kódu: Kód: procedure TForm1.odmer; Zkusil jsem problém vyřešit přesunutím aktivace epsnetu do spouštěcí části kódu a jeho vymazání (nil) přesunutím do ukončovací části. Výsledkem bylo zacyklení ladiče a tuhnutí celé aplikace. Toto je verze, která funguje z uvedeného nejlépe, ale s každým dotazem zabere další část operační paměti. Dotaz zaslaný mailem (viz výzva (http://forum.elsaco.cz/index.php?topic=13.msg112#msg112)). Název: Re: IEpsnet a Delphi - neuvolňování paměti Přispěvatel: libor 27.09.2013, 10:43:07 Vytvoření a zrušení objektu epsnet, tj. vytvoření:
Kód: epsnet := CreateOLEObject('Elsaco.Driver.Epsnet.2') As IEpsnet;a zrušení: Kód: epsnet := nil; někde v inicializaci a deinicializaci aplikace by fungovat mělo. No a pak ta data. Získáváte je: Kód: data := epsnet.Read(2, 0, 8); což ve výsledku znamená, že funkce Read alokuje paměť (SafeArray) pro výsledný blok dat. Po zpracování těchto dat by jste je měl z paměti uvolnit, tj. v Delphi by mělo stačit: Kód: data := nil; což je napsáno v nápovědě v poznámce, ale není to uvedeno v příkladech, takže to tam doplním. |