目前我正在Delphi中开发一个小型安全应用程序。它打算安装在Windows XP和更高版本的操作系统中,几乎已经完成,但我想在打开时实现扫描MS Office文件的功能。为此,我计划使用IOfficeAntiVirus接口。我试图根据Serge Perevoznyk(http://www.delphi-central.com/MS_Office_AV_API.aspx)的文章实现使用界面的扫描方法。
原始示例应该在打开文件时显示一个消息框,但它没有,尽管我在不同版本的Windows和Office上尝试过它。我将此解决方案与MSDN上的信息进行了比较。这似乎是正确的。我想在Windows注册表中应该有一些额外的设置我错过了。任何人都可以给我一些提示,我在哪里寻找解决方案?
答案 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);