因此我被告知我可能無法訪問註冊表或程序,通常它們將其IFilter加載到系統中,所以我必須將IFilter dll包含在應用程序中並直接加載它們從那裏。我目前使用CodeProject的C#IFilter類,但是當涉及到filterPersistClass,persistentHandlerClass和COM時,它們仍然是我頭上的一些東西,因此我有點失去了如何才能使它工作。在沒有註冊表的情況下加載IFilter
我已經完成了所有世俗的東西,如獲取DLL,設置一個資源文件與「擴展,DLL路徑」,但似乎無法得到如何現在加載IFilter DLL 。也許我應該從頭開始,但我認爲我會首先要求一些幫助。
EDIT(部分解決方案)
好吧,我想通了,如何加載query.dll在FilterReader.cs的FilterReader構造函數使用下面的代碼,雖然我有問題,現在加載PDFFilter.dll文件並且出現以下錯誤:
無法在DLL'C:\ Program Files \ Adobe \ Adobe PDF iFilter 9 for 64-bit platforms \ bin \ PDFFilter.dll'中找到名爲'LoadIFilter'的入口點。
問題I th我現在卡在的墨水是PDFFilter.dll使用STA和C#應用程序是MTA。
[DllImport("query.dll", SetLastError = true, CharSet = CharSet.Unicode)]
static extern int LoadIFilter(string pwcsPath, [MarshalAs(UnmanagedType.IUnknown)] ref object pUnkOuter, ref IFilter ppIUnk);
// --------------------------- constructor ----------------------------------
var isFilter = false;
object iUnknown = null;
LoadIFilter(fileName, ref iUnknown, ref _filter);
var persistFile = (_filter as IPersistFile);
if (persistFile != null)
{
persistFile.Load(fileName, 0);
IFILTER_FLAGS flags;
IFILTER_INIT iflags =
IFILTER_INIT.CANON_HYPHENS |
IFILTER_INIT.CANON_PARAGRAPHS |
IFILTER_INIT.CANON_SPACES |
IFILTER_INIT.APPLY_INDEX_ATTRIBUTES |
IFILTER_INIT.HARD_LINE_BREAKS |
IFILTER_INIT.FILTER_OWNED_VALUE_OK;
if (_filter.Init(iflags, 0, IntPtr.Zero, out flags) == IFilterReturnCode.S_OK)
isFilter = true;
}
if (_filter != null && isFilter) return;
if (_filter != null) Marshal.ReleaseComObject(_filter);
那麼,停止你在做什麼,因爲它沒有註冊的過濾器不會工作。索引器使用註冊表來查找過濾器。 –