Коллеги, что-то у меня голова разболелась от происходящего, не сочтите за труд, укажите, что я делаю не так.
Есть два интерфейса:
type
ITubeVideo = interface(IInterface)
[TubeVideoGUID]
function getOrigin: string;
function getMOID: string;
function getMTitle: string;
function getMDescription: string;
property TubeOrigin: string read getOrigin;
property mOID: string read getMOID;
property mTitle: string read getMTitle;
property mDescription: string read getMDescription;
end;
ITubeVideoList = interface(IInterface)
[TubeVideoListGUID]
function getVideos: TArray<ITubeVideo>;
property Videos: TArray<ITubeVideo> read getVideos;
end;
Плохо начинается уже в реализации getVideos:
function TTubeSearch.getVideos: TArray<ITubeVideo>;
begin
Result := TArray<ITubeVideo>(Fresults);
end;
Дебугер говорит, что это Pointer($...) as ITubeVideoList, начинённый кучкой Pointer($...) as ITubeVideo. При попытке получить интерфейс элемента массива ITubeVideo, вываливается AccessViolation вот тут (модуль System).

Если всё делать без интерфейсов, работает просто замечательно. И даже с интерфейсами, если отдельный объект ITubeVideo создать — всё работает. Но если из массива — что-то ему мешает.