【问题标题】:Using IOfficeAntiVirus interface in Delphi在 Delphi 中使用 IOfficeAntiVirus 界面
【发布时间】:2014-03-03 18:58:14
【问题描述】:

目前我正在用 Delphi 开发一个小型安全应用程序。它旨在安装在 Windows XP 和更高版本的操作系统中并且几乎完成,但我想实现在打开时扫描 MS Office 文件的功能。为此,我打算使用 IOfficeAntiVirus 界面。我正在尝试根据 Serge Perevoznyk (http://www.delphi-central.com/MS_Office_AV_API.aspx) 的文章使用接口的扫描方法来实现。

最初的示例应该在打开文件时显示一个消息框,但它没有,尽管我在不同版本的 Windows 和 Office 上尝试过。我将此解决方案与 MSDN 上的信息进行了比较。这似乎是正确的。我想在 Windows 注册表中应该有一些我错过的额外设置。谁能给我一些提示,我应该在哪里寻找解决方案?

【问题讨论】:

    标签: delphi


    【解决方案1】:

    你不使用IOfficeAntiVirus,你实现它。

    您需要创建一个新的 ActiveX 库,其中包含一个新的 ActiveX 控件,该控件的实现类实现了Scan() 方法。在控件的注册代码中,您必须使用ICatRegister 将您的控件注册为使用CATID_MSOfficeAntiVirus 类别。这样,Office/IE 可以找到您的 ActiveX 控件,以便对其进行实例化并调用其Scan() 实现。 Serge 文章的后半部分向您展示了如何做到这一点(Serge 的示例显示 Scan()PChar 作为输入,但实际上它需要 TMsoavinfo^。不要使用 PChar 传递 TMsoavinfo) .

    然后您必须使用 Windows 的命令行 regsvr32.exe 应用程序注册生成的 DLL。

    如果 Office/IE 没有调用您的 Scan() 实现,那么您可能没有正确注册 ActiveX 控件,例如您没有考虑 32 位/64 位和/或 UAC 问题。

    【讨论】:

      【解决方案2】:

      如果有人感兴趣,仅供参考。 Remy 的回答是正确的,但是上面提到的示例项目的初始化部分有一个小错误。

      代替

      TComObjectFactory.Create(ComServer, TMsoTest, Class_MsoTest, 'MsoTest', '', ciMultiInstance, tmApartment);

      正确的命令是:

      TMSOAVFactory.Create(ComServer, TMsoTest, Class_MsoTest, 'MsoTest', '', ciMultiInstance, tmApartment);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-24
        • 2011-03-11
        • 2013-08-12
        • 2010-11-30
        • 1970-01-01
        • 1970-01-01
        • 2014-09-07
        • 1970-01-01
        相关资源
        最近更新 更多