Тема: Удаление из памяти объектов TechnologiCS
Хоть вопрос удаления из памяти обсуждался на форуме, хотелось бы окончательно прояснить, как всё-таки правильнее освождать память по окончании работы с объектами API TechnologiCS.
Столкнулись вот с чем - при работе процедуры из разработанной нами библиотекми возникает следующая ошибка:
Недостаточно памяти для обработки команды
Ошибка возникает при расчёте плана изготовления на заказ, где более 150 позиций номенклатуры, для каждой позиции - около 10-12 операций. С заказами, где количество изготавливаемой номенклатуры меньше - всё работало нормально.
Удалось отследить, что ошибка возникает, когда в очередной раз выполняется следующее действие:
function GetPlanPosNeeds: real; var OrderMovePlan: IDModule; begin OrderMovePlan := TechPlan.ChildModules.ModuleByName['OrderMovePlan'].AsIDispatch as IDModule; CreateModule(OrderMovePlan); ... DeleteModule(OrderMovePlan); end;
Для удаления OrderMovePlan, как и для других объектов в программе, используется пара процедур CreateModule(Module : IModule) и DeleteModule(Module : IModule):
procedure CreateModule(Module : IModule); begin If CheckExist(Module) then (Module as IModule2).UserModuleName:=(Module as IModule2).UniqueUserModuleName end; procedure DeleteModule(Module : IModule); begin try If CheckExist(Module as Imodule) then (TCSApp As IOCS_Application2).DeleteModuleByUserModuleName((Module as IModule2).UserModuleName); except end; end;
Функция CheckExist(Module as Imodule) служит для проверки существования созданных объектов TechnologiCS`а и выглядит так:
function CheckExist(Module: IModule): Boolean; var Temp : integer; begin Temp :=-1; try Temp := Module.Handle; except Result:=False; Exit; end; Result:=True; end;
К ней приходится прибегать из-за того, что сравнение с nil и проверка функцией Assign не всегда даёт правильный результат.
Подскажите, пожалуйста, что мы делаем не так.