2010-09-28 56 views
4

我有一個用Delphi編寫的IFilter,我試圖在64位Windows 7桌面搜索下工作。從64位IFilter使用32位Com對象

由於它是在Delphi中開發的,我只能將它編譯爲32位DLL。

要解決這個問題,我想在Visual C++中編寫一個64位IFilter DLL,它在內部使用我的32位IFilter Com對象,使用DllSurogate技術概述了here

我已經在測試64位控制檯應用程序下正常工作。我可以創建一個64位包裝器的實例,它在內部創建32位IFilter對象並將所有調用委託給它。然後我可以檢索我的文檔的內容。

問題是,當我註冊的是WDS的64位包裝器不能再創建32位對象。 CoCreateInstance返回'服務器執行失敗'(CO_E_SERVER_EXEC_FAILURE)。

這是我是誰創造了側面的32位對象的64位包裝

result = CoCreateInstance(clsid, 0, CLSCTX_LOCAL_SERVER , IID_IFilter, (LPVOID*)&m_pFilter); 

任何想法,爲什麼發生這種情況。 WDS中的IFilters是否具有權限限制?

感謝您的任何幫助。

回答

7

是的。 IFilter在一個名爲SearchFilterHost.exe的主機進程中運行。由於過濾器可能會打開含有惡意內容的文件,因此主機的權限非常有限。開始一個過程的能力肯定不會被包括在內。不知道如何覆蓋這一點,或者如果你甚至應該考慮這樣做。谷歌搜索「searchfilterhost.exe」帶來了大量的警鐘。這將是一個痛苦的消息,很抱歉成爲持票人。

+0

你(或其他人)知道SQL Server和SharePoint是否有相同的限制嗎?我現在無法測試它們,並且無法在Google上找到任何信息。我主要爲SharePoint做這些事情,也許有一些希望!否則,我需要重新考慮它 – Jamie 2010-09-28 21:27:53

1

另外請記住,調用應用程序不會在每次使用後卸載您的ifilter。它將重用內存中的ifilter來解析許多文件。但是,如果主機進程感知到問題(例如內存泄漏增加),它將卸載您的ifilter並再次嘗試。幾年前,我在32位上使用過ifilter代碼,但是我一直無法解決64位上更嚴格的限制。如果你知道如何做到這一點,我希望你願意在網上發佈具體信息...