Поскольку у меня было много трудностей при использовании DLL, я решил попробовать пакеты времени выполнения (в основном, чтобы избежать проблем с менеджером памяти и проблемами реестра типов).
Из своего приложения я делаю что-то вроде этого:
HandleList := TList <THandle>.Create;
try
PackageObj.DoSomething (HandleList);
finally
FreeAndNil (HandleList);
end;
Метод (внутри пакета среды выполнения) просто добавляет что-то в список:
procedure TPackageObject.DoSomething (HandleList: TList <THandle>);
begin
HandleList.Clear;
HandleList.Add (0);
end;
Я получаю исключение Invalid Pointer
либо при вызове Clear
в пакете, либо при вызове FreeAndNil
в приложении. Время от времени также случаются нарушения доступа.
При использовании FastMM иногда появляется сообщение «Заголовок блока поврежден».
Ошибка всегда возникает, когда память выделяется или освобождается, то есть добавление чего-либо в список и, следовательно, динамическое увеличение списка.
Способ передачи объекта HandleList
в пакет и обратно в порядке? Что-нибудь важное знать о пакетах и управлении памятью? Или ошибка должна быть где-то еще?
РЕДАКТИРОВАТЬ В случае, если ошибка может быть где-то еще, как я должен отладить что-то вроде этого? Есть опыт?