Я использую IPersistFile в C# для загрузки файла, прежде чем читать его как IFilter:Как загрузить IPersistFile из памяти?
IFilter filter = LoadIFilter (fileextension);
IPersistFile persistFile = (filter as IPersistFile);
if (persistFile != null) {
persistFile.Load (fileName, 0);
IFILTER_FLAGS flags;
IFILTER_INIT iflags = IFILTER_INIT.FILTER_OWNED_VALUE_OK;
if (filter.Init (iflags, 0, IntPtr.Zero, out flags) == IFilterReturnCode.S_OK) {
return filter; // will be read using GetChunk/GetText
}
}
Это прекрасно работает.
Однако я хотел бы загрузить содержимое файла из памяти вместо пути к диску. Это возможно? Интерфейс IPersistFile не показывает другого способа, кроме предоставления строки пути, поэтому кажется, что ни файл с отображением памяти, ни массив байтов не могут использоваться.
Да, вся разумная реализация 'IFilter' должна реализовывать' IPersistStream', и вы можете просто попробовать запросить 'IPersistStream' и использовать его. – sharptooth
@sharptooth Спасибо, вижу. Таким образом, IFilter должен реализовать как можно больше интерфейсов IPersistX для использования во всех ситуациях. – mafu
Ну, на самом деле, минимум кажется «IFilter», «IPersistFile» и «IPersistStream». – sharptooth