Ich würde sagen, das liegt an der Device-Liste, dabei hast dudoch schon eine so schöne Variable dafür: FDevices. Ich würde mal folgendes ändern.
Delphi-Quellcode:
function TCapSource.GetDevices:TStringList;
var i:integer;
begin
If Assigned(FDevices) then
FreeAndNil(FDevices);
FDevices := TStringlist.Create;
Capenum := TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
for i := 0 to Capenum.CountFilters - 1 do
FDevices.Add(Capenum.Filters[i].FriendlyName);
result := FDevices;
end;
Ausserdem solltest du noch einen constructor erstellen:
Delphi-Quellcode:
TCapSource = class
// ...
public
constructor Create;
// ...
end;
Delphi-Quellcode:
constructor TCapSource.Create;
begin
inherited;
FDevices := nil;
end;
PS: Deine Zugriffsverletzung kommt wohl dadurch, das DeviceListe ja innherhalb der Funktion deklariert ist und deshalb nach dem Abschluss der Funktion wieder freigegeben wird.