gpt4 book ai didi

delphi - 使用 64 位 IFilter 中的 32 位 Com 对象

转载 作者:行者123 更新时间:2023-12-03 15:22:44 26 4
gpt4 key购买 nike

我有一个用 Delphi 编写的 IFilter,我正尝试在 64 位 Windows 7 桌面搜索下工作。

由于它是用 Delphi 开发的,我只能将其编译为 32 位 DLL。

为了解决这个问题,我尝试用 Visual C++ 编写一个 64 位 IFilter Dll,它在内部使用我的 32 位 IFilter Com 对象,并使用概述的 DllSurogate 技术 here .

我已经在测试 64 位控制台应用程序下使所有这些工作正常。我可以创建 64 位包装器的实例,该实例在内部创建 32 位 IFilter 对象并将所有调用委托(delegate)给它。然后我可以检索文档的内容。

问题是当我使用 WDS 注册时,64 位包装器无法再创建 32 位对象。 CoCreateInstance 返回“服务器执行失败”(CO_E_SERVER_EXEC_FAILURE)。

这就是我在 64 位包装器中创建 32 位对象的人

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

知道为什么会发生这种情况吗?是否是 WDS 中 IFilter 的权限限制?

感谢您对此提供的任何帮助。

最佳答案

是的。 IFilter 在名为 SearchFilterHost.exe 的托管进程内运行。由于过滤器可能会打开包含恶意内容的文件,因此主机的运行权限非常有限。启动进程的能力肯定不包括在内。不知道如何覆盖它,或者就此而言,您是否应该考虑这样做。谷歌搜索“searchfilterhost.exe”会弹出很多警报。这一定是一个令人痛苦的消息,很抱歉成为传达者。

关于delphi - 使用 64 位 IFilter 中的 32 位 Com 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3816985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com