0 Members and 1 Guest are viewing this topic.
function TSACDImageFileExpander.Expand(FileName: IAIMPString; out List: IAIMPObjectList; ProgressCallback: IAIMPProgressCallback): HRESULT;var LFileName: string;begin Result := E_FAIL; LFileName := IAIMPStringToString(FileName); if acEndsWith(LFileName, '.iso') then begin CoreCreateObject(IID_IAIMPObjectList, List); ... for var I := 0 to AImage.SubTracks.Count - 1 do List.Add(TSACDVirtualFile.Create(AImage.SubTracks[I])); if List.GetCount > 0 then Result := S_OK; end;end;
TSACDVirtualFile = class(TAIMPPropertyList, IAIMPVirtualFile)...
procedure TSACDVirtualFile.DoGetValue(PropID: Integer; out Value: Variant; var Result: HRESULT);const Map: array[TSACDImageAreaTOC] of string = ('', 'area1_', 'area2_');begin case PropID of AIMP_VIRTUALFILE_PROPID_INDEXINSET: Value := FIndex; AIMP_VIRTUALFILE_PROPID_FILEURI: Value := FContainer.GetFileName + ':' + Map[FContainer.GetAreaTOC] + acFormatTrackNo(FIndex); AIMP_VIRTUALFILE_PROPID_FILEFORMAT: Value := 'DSD'; else inherited; end;end;
Не очень понимаю вопроса. Работа с файлом-контейнером реализуется на стороне плагина, точкой входа служит IAIMPExtensionFileExpander.Expand куда приходит имя файла. Соответственно, дальше вы уже оперируете его данными, что откуда и как брать. Stream фигурирует только в одном месте - IAIMPVirtualFile.CreateStream, который дергается движком плеера при попытке прочитать данные файла.
1) Декодер можно создать и на основе имени файла.
Тоесть в качестве FileURI можно указать просто имя файла (FileName)?
Не могу вывести ошибку через месседж бокс, это особенность платформы или прогресс бар мешает?
Оно работает в потоке, соответственно, ничего GUI-шного дёргать нельзя
тоесть кроме ошибки ненайденого декодера больше вывести нельзя?
Все ошибки должны выводиться через HRESULT. Для отладки можно писать события в лог
Не удобно это для файла, который пишет сам пользователь. Мне бы хотелось выводить ошибки, подобные ошибкам незакрытых строк или недостающих полей. Да и ошибка ненайденного декодера тоже сбивает с толку.