在Delphi中使用IOfficeAntiVirus接口

时间:2014-03-01 14:49:44

标签: delphi

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

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

2 个答案:

答案 0 :(得分:1)

使用 IOfficeAntiVirus实施

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

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

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

答案 1 :(得分:0)

只是为了信息,如果有人有兴趣的话。 Remy的回答是正确的,但是在上面提到的示例项目的初始化部分中存在一个小错误。

而不是

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

正确的命令是:

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